مراية لـ
https://github.com/postalserver/postal.git
تم المزامنة 2026-01-17 21:39:47 +00:00
initial commit from appmail
هذا الالتزام موجود في:
75
app/controllers/sessions_controller.rb
Normal file
75
app/controllers/sessions_controller.rb
Normal file
@@ -0,0 +1,75 @@
|
||||
class SessionsController < ApplicationController
|
||||
|
||||
layout 'sub'
|
||||
|
||||
skip_before_action :login_required, :only => [:new, :create, :create_with_token, :begin_password_reset, :finish_password_reset, :ip, :raise_error]
|
||||
skip_before_action :verified_email_required
|
||||
|
||||
def create
|
||||
login(User.authenticate(params[:email_address], params[:password]))
|
||||
flash[:remember_login] = true
|
||||
redirect_to_with_return_to root_path
|
||||
rescue Postal::Errors::AuthenticationError => e
|
||||
flash.now[:alert] = "The credentials you've provided are incorrect. Please check and try again."
|
||||
render 'new'
|
||||
end
|
||||
|
||||
def create_with_token
|
||||
result = JWT.decode(params[:token], Postal.signing_key.to_s, 'HS256')[0]
|
||||
if result['timestamp'] > 1.minute.ago.to_f
|
||||
login(User.find(result['user'].to_i))
|
||||
redirect_to root_path
|
||||
else
|
||||
destroy
|
||||
end
|
||||
rescue JWT::VerificationError
|
||||
destroy
|
||||
end
|
||||
|
||||
def destroy
|
||||
auth_session.invalidate! if logged_in?
|
||||
reset_session
|
||||
redirect_to login_path
|
||||
end
|
||||
|
||||
def persist
|
||||
auth_session.persist! if logged_in?
|
||||
render :plain => "OK"
|
||||
end
|
||||
|
||||
def begin_password_reset
|
||||
if request.post?
|
||||
if user = User.where(:email_address => params[:email_address]).first
|
||||
user.begin_password_reset(params[:return_to])
|
||||
redirect_to login_path(:return_to => params[:return_to]), :notice => "Please check your e-mail and click the link in the e-mail we've sent you."
|
||||
else
|
||||
redirect_to login_reset_path(:return_to => params[:return_to]), :alert => "No user exists with that e-mail address. Please check and try again."
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def finish_password_reset
|
||||
@user = User.where(:password_reset_token => params[:token]).where("password_reset_token_valid_until > ?", Time.now).first
|
||||
if @user.nil?
|
||||
redirect_to login_path(:return_to => params[:return_to]), :alert => "This link has expired or never existed. Please choose reset password to try again."
|
||||
end
|
||||
|
||||
if request.post?
|
||||
if params[:password].blank?
|
||||
flash.now[:alert] = "You must enter a new password"
|
||||
return
|
||||
end
|
||||
@user.password = params[:password]
|
||||
@user.password_confirmation = params[:password_confirmation]
|
||||
if @user.save
|
||||
login(@user)
|
||||
redirect_to_with_return_to root_path, :notice => "Your new password has been set and you've been logged in."
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def ip
|
||||
render :plain => "ip: #{request.ip} remote ip: #{request.remote_ip}"
|
||||
end
|
||||
|
||||
end
|
||||
المرجع في مشكلة جديدة
حظر مستخدم