email - How to create a link that automatically logs the user in on devise / rails? -
i'm trying make signed users take action on website, want send then, e-mail, link directly action.
the problem want automatically logged in when clicking on link.
i can obvious creating unique token , pass through url mysite.com/my_funky_action?login_bypass_token=af123fa127ba32 seems me problem "solved many times before"
so, there simple way out there using rails / devise? i've searched on devise documentation without success.
using basis code devise's recoverable, did this
model:
class user < activerecord::base def set_login_bypass_token raw, enc = devise.token_generator.generate(user, :login_bypass_token) self.login_bypass_token = enc self.login_bypass_token_set_at = time.now.utc self.save(validate: false) raw end def self.by_bypass_token(token) original_token = devise.token_generator.digest(self, :login_bypass_token, token) user.find_by(:login_bypass_token => original_token) end end
mailer:
class somemailer < actionmailer::base def send_something ... @login_bypass_token = @user.set_login_bypass_token ... end end
application_controller:
class applicationcontroller < actioncontroller::base layout :application_layout protect_from_forgery with: :exception before_action :bypass_login before_action :authenticate_user! private def bypass_login if params[:login_bypass_token] user = user.by_bypass_token(params[:login_bypass_token]) sign_in(user, :bypass => true) if user redirect_to request.path end end end
email template (in haml)
= link_to 'view awesome page without login!', awesomeness_url(:login_bypass_token => @login_bypass_token)
Comments
Post a Comment