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

Popular posts from this blog

angularjs - ADAL JS Angular- WebAPI add a new role claim to the token -

php - CakePHP HttpSockets send array of paramms -

node.js - Using Node without global install -