2013-11-13 06:37:38 +08:00
|
|
|
class UserAuthenticator
|
2014-11-17 19:04:29 +08:00
|
|
|
|
2013-11-13 06:37:38 +08:00
|
|
|
def initialize(user, session, authenticator_finder = Users::OmniauthCallbacksController)
|
|
|
|
@user = user
|
|
|
|
@session = session[:authentication]
|
|
|
|
@authenticator_finder = authenticator_finder
|
|
|
|
end
|
|
|
|
|
|
|
|
def start
|
|
|
|
if authenticated?
|
|
|
|
@user.active = true
|
|
|
|
else
|
|
|
|
@user.password_required!
|
|
|
|
end
|
2016-09-08 02:05:46 +08:00
|
|
|
|
|
|
|
@user.skip_email_validation = true if @session && @session[:skip_email_validation].present?
|
2013-11-13 06:37:38 +08:00
|
|
|
end
|
|
|
|
|
2014-03-20 11:49:25 +08:00
|
|
|
def has_authenticator?
|
|
|
|
!!authenticator
|
|
|
|
end
|
|
|
|
|
2013-11-13 06:37:38 +08:00
|
|
|
def finish
|
2017-02-24 13:13:10 +08:00
|
|
|
if authenticator && authenticated?
|
|
|
|
authenticator.after_create_account(@user, @session)
|
|
|
|
end
|
|
|
|
|
2013-11-13 06:37:38 +08:00
|
|
|
@session = nil
|
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
def authenticated?
|
|
|
|
@session && @session[:email] == @user.email && @session[:email_valid]
|
|
|
|
end
|
|
|
|
|
|
|
|
def authenticator
|
|
|
|
if authenticator_name
|
|
|
|
@authenticator ||= @authenticator_finder.find_authenticator(authenticator_name)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def authenticator_name
|
|
|
|
@session && @session[:authenticator_name]
|
|
|
|
end
|
2014-11-17 19:04:29 +08:00
|
|
|
|
2013-11-13 06:37:38 +08:00
|
|
|
end
|