ruby-on-rails - 如何创建一个让用户自动登录到设备/rails 的链接?

标签 ruby-on-rails email ruby-on-rails-4 devise

我试图让注册用户在我的网站上执行一些操作,所以我想通过电子邮件向他们发送一个直接指向此操作的链接。

问题是我希望他们在单击此链接时自动登录。

我可以做一些显而易见的事情,比如创建一个独特的 token 并将其通过 url mysite.com/my_funky_action?login_bypass_token=af123fa127ba32 传递。但这在我看来是一个“以前解决过很多次”的问题

那么,有一种简单的方法可以使用 rails/devise 来做到这一点吗?我搜索了设计文档但没有成功。

最佳答案

使用设计的可恢复代码作为基础,我做到了

模型:

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

邮寄人:
class SomeMailer < ActionMailer::Base
    def send_something
        ...
        @login_bypass_token = @user.set_login_bypass_token
        ...
    end
end

应用 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

电子邮件模板(在haml)
= link_to 'View this awesome page without login!', awesomeness_url(login_bypass_token: @login_bypass_token)

关于ruby-on-rails - 如何创建一个让用户自动登录到设备/rails 的链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30562638/

相关文章:

ruby-on-rails - 如何在 Rails 共享主机上执行 restart.txt ruby

mysql - 检查模型属性之间存在当前时间

python - 我如何在 Django 中使用 rapportive.py

c# - 发送嵌入 html 的电子邮件时缺少图像样式

ruby-on-rails - 迁移正在等待;运行 'rake db:migrate RAILS_ENV=development' 来解决这个问题。?

ruby-on-rails - rails : Different modal for each link

ruby-on-rails - 更改路由行为但保留 "Convention over Configuration"

ruby-on-rails - 设计:不需要电子邮件

html 电子邮件在 yahoo 和 outlook 中看起来很糟糕,但在其他方面都很好

ruby-on-rails-4 - 如何更改 Refinery CMS 管理路径?