如何创建一个自动让用户登录到 devise/rails 的链接?

2024-01-24

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

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

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

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


使用设备可恢复的代码作为基础,我这样做了

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

应用程序控制器:

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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何创建一个自动让用户登录到 devise/rails 的链接? 的相关文章

  • 如何在rails中使用npm包?

    我正在尝试使用王牌编辑 https github com ajaxorg ace在我的 Ruby on Rails 应用程序中 大部分视图由 React 组件组成 我正在使用反应轨道宝石 https github com reactjs r
  • Eventmachine start_tcp_server 无接受器 - 端口正在使用或需要 root 权限(运行时错误)

    我已经 3 天无法运行本地服务器了 重新启动我的计算机没有帮助 有几次 在反复尝试大约 40 50 次之后 它随机地起作用了 我不明白为什么 我尝试过一次不同的端口并且有效 但从那以后 没有端口有效 每次我尝试运行我的 Rails 服务器时
  • 错误“未初始化常量 AWS (NameError)”

    它说 AWS 未初始化 我正在使用 aws sdk core gem 我尝试使用 aws sdk gem 代替 问题仍然存在 这是initializers aws rb 文件 AWS config access key id gt ENV
  • Rails 3 - “无法解析 Yaml”

    我不知道我做错了什么 我尝试运行 rails c 但它只是给了我一个错误 10 分钟前它还在工作 C Ruby192 lib ruby 1 9 1 psych rb 148 in parse couldn t parse YAML at l
  • Twitter Bootstrap 中下拉链接的模态

    我正在尝试从下拉菜单中的链接进行模式启动 该模式似乎已启动 网站变为灰色 但看不到 来自不在下拉列表中的常规链接的模态工作得很好 我对 jquery 进行了愚弄 但由于我是 jquery 的新手 所以没有任何结果 这是我的网站代码
  • HABTM 关系和accepts_nested_attributes_for

    我有一个可以让我创建的表单新博客文章我希望能够创造新类别来自同一个表格 我在帖子和类别之间有一个习惯关系 这就是我遇到麻烦的原因 我有以下2个型号 class Post lt ActiveRecord Base has and belong
  • SMTP 配置在生产中不起作用

    我正在尝试在提交表单时发送电子邮件 我正在使用 PHPMailer 使用以下配置发送邮件 mail new PHPMailer mail gt isSMTP mail gt Host mail example in mail gt Port
  • kaminari ajax 分页不更新分页

    我正在使用 kaminari gem 在 Rails3 中实现分页 我一直在关注github上的这段代码https github com amatsuda kaminari example commits ajax https github
  • Rails Capistrano 3 - 如何将 production.log 文件共享到 Capistrano 的共享文件夹中?

    我正在使用 Capistrano 3 与我的 Rails 应用程序一起部署 问题是 每次我将应用程序部署到服务器时 log development log 文件都会重置 我听说可以将 production log 文件放入共享文件夹中并在每
  • 如何禁用 iPhone 邮件应用程序中的电话号码链接?

    我的公司正在发送数字电子邮件收据 但遇到了 iPhone Mail 检测数字数据并将其自动链接为电话号码的问题 我已经看到元标记应该可以解决 iPhone 上的 Mobil Safari 中的问题 但该技巧似乎不适用于 Mail 有谁知道如
  • 在 ActiveAdmin 或打印解决方案中动态更改分页

    我是 Activeadmin 和 Rails 的新手 我需要一些帮助 我有一个分页模型 我想允许用户更改分页值或完全禁用它 这样它就可以打印 到打印机 所有记录 或过滤后的记录 我知道我可以在 before filter 中使用 per p
  • Rails 从 OrdersController 更新用户模型的属性

    这是我的代码 订单控制器类 def create order Order new params order if order purchase work GATEWAY store credit card options result wo
  • Omniauth + Google + Faraday + 代理背后=如何设置代理?

    我的生产服务器是乌班图12 我在用着设计 OmniAuth处理 Google 身份验证 但是当 Google 将控件返回给我的应用程序时 我收到错误 网络不可达 我认为这是因为服务器位于代理后面 这是错误描述 Request URL htt
  • 如何在两个模型之间建立两个 has_many/belongs_to 关系?

    我有一个Project模型 以及一个Contact模型 项目模型有一个所有者和一个客户 两者都是Contacts 显然我遇到了一些不明确的事情 因为如果我有联系人并询问其项目 Rails 将不知道我询问的是它的项目是客户还是所有者 到目前为
  • Rails - 安装 Spree 时出现问题

    我在 Rails 应用程序中安装 Spree 时遇到问题 当我运行 gem spree 时 按照说明http spreecommerce com documentation getting started html http spreeco
  • Rails 4 和 Turbolinks - 元标签未更改

    我有一个启用了 Turbo Links 的 Rails 4 应用程序 但在更改页面时无法刷新元标记 不是完全刷新 我读到元标记需要包含在加载涡轮链接的 JavaScript 之前 但它没有效果 完全刷新可以完成这项工作 但不幸的是这不是我所
  • 如何使用 Ruby on Rails 3 检查 HTTP 请求的“Content-Length”字段?

    我正在使用 Ruby on Rails 3 在我的视图文件中我有以下代码 为了避免服务器过载 我会在服务器接收上传文件之前检查上传文件的大小 这是因为 按下表单的提交按钮 服务器会先完整接收文件 然后再检查文件 我知道一个HTTP 请求有标
  • Capybara with Rails:如何仅查找不可见元素

    我正在 Rails 项目 Rails 5 2 0 中使用 Capybara capybara 3 1 0 进行系统测试 确保元素不可见的方法是什么 我当时用的是visible false选项 直到我发现它也匹配可见元素 例如我使用 find
  • puma systemd 脚本无法启动 puma

    我已经从多个来源复制并粘贴了以下美洲狮系统启动脚本的片段 但它不起作用 系统是Debian 9 6 用户rails红宝石通过安装rvm 用户rails可以启动命令RAILS ENV production bundle exec puma C
  • Rails 3.1 中何时将图像放入 app/assets 以及何时放入 /public/images?

    我仍然不太明白 在这种情况下 在 Rails 3 1 中将图像放在哪里 图像被处理 例如通过回形针或蜻蜓 并存储在文件夹中 不使用像 s3 这样的外部服务 f e 在开发中 当我只有图像时 我将在样式表中使用它 例如背景 图标 AppSto

随机推荐

  • 如何删除postgres中特定模式中的每个表?

    如何删除特定架构中的所有表 仅应删除架构中的表 我已经有了使用下面的代码获取的所有表名称 但是如何删除所有这些表 以下是一些 psycopg2 代码 下面是生成的 SQL writeCon execute SELECT table name
  • Python请求:从数据库加载SSL证书

    我在用requests使用 https 协议中的 Web 服务 我曾经通过设置来验证服务器证书verify作为证书的文件路径 但现在我想将服务器证书存储到数据库中 在运行时 证书将以字符串形式加载到内存中 问题是是否可以将服务器证书传递给r
  • std::pair 内的初始化列表

    这段代码 include
  • 跟踪 gradle 脚本中每个任务的执行时间?

    跟踪 gradle 构建脚本中任务花费多长时间的执行时间的最优雅方法是什么 在最佳情况下 将时间直接记录到任务名称的同一行或下一行 buildSrc testClasses 0 518 secs fooBar 28 652 secs 只是为
  • 尽管在 conda-forge 中找到了软件包,但无法满足 conda 软件包:软件包 XXX 需要软件包 YYY,但无法安装任何提供程序

    我正在尝试创建一个简单的环境 channels rdonnelly bioconda anaconda r conda forge defaults dependencies bioconda bioconductor mixomics g
  • 使用 PHP 和/或 Javascript 进行屏幕抓取?

    只是想知道是否可以使用 PHP 脚本或 JavaScript 来屏幕抓取您正在查看的页面 例如 在 iframe 中加载页面 然后将该视图保存为 JPEG 我确信这是可能的 但是是否有任何已知的实现 库可以提供帮助 不 抱歉 这对于 Jav
  • 是否可以在 Google Cloud Console 中仅对帐户设置 storage.buckets.get 权限?

    如何为用户设置此权限 我只看到相关的Storage gt Storage admin它提供了storage buckets 但是我不希望此用户帐户具有如此广泛的权限 我从该页面确定了上述信息 https cloud google com s
  • 哪个安装程序安装 Microsoft.Web.Publishing.Tasks.dll?

    我们的构建脚本包含一个使用的任务Microsoft Web Publishing Tasks dll 在文件夹中 MSBuildExtensionsPath32 Microsoft VisualStudio v10 0 Web where
  • java序列化与kryo序列化的优缺点是什么?

    在spark中 java序列化是默认的 如果kryo那么高效那么为什么不将其设置为默认值 使用 kryo 是否有一些缺点 或者在什么情况下我们应该使用 kryo 或 java 序列化 这是来自的评论文档 https spark apache
  • Delphi 的 VCL 中的命名空间兼容性

    如何最好地保持 Delphi 7 到 Delphi XE7 之间使用的命名空间的兼容性 Delphi 7 使用 SysUtils 而 Delphi XE7 使用 System SysUtils 它使用许多 ifdef 使代码变得混乱 所以我
  • 如何从 wsdl 生成 Web 服务

    客户端向我提供了 wsdl 来生成 Web 服务 但是当我使用 wsdl exe 命令时 它生成了 cs 类 我在 Web 服务中使用了该类 当我向客户端提供 wsdl 时 它与他们的架构不匹配 实际上 我希望从 wsdl 自动生成 asm
  • 在 MySQL 中将 dd/mm/yyyy 字符串转换为 Unix 时间戳

    在我的表中 我有一个名为的 varchar 列date包含 dd mm yyyy 格式的日期字符串表示形式 如何在 SELECT 查询中将它们转换为 Unix 时间 select unix timestamp str to date 30
  • NSURLRequest 到 NSString

    如何将 NSURLRequest 转换为 NSString NSString urlRequestToString NSURLRequest urlRequest NSString requestPath urlRequest URL ab
  • 使用 CloudKit 共享私有数据

    有没有一种简单的方法可以使用 CloudKit 在两个或多个用户之间共享私有数据 公共和私人日期是显而易见的 但似乎没有一种方法可以允许一组用户组织自己的孤岛以在彼此之间共享数据 而不将其提供给系统的所有其他用户和应用程序开发人员 我想到了
  • DAX 测试整数

    我有一个实际值列 如下所示 ID Airport A 98 4 B 98 0 C 95 3 我正在尝试将上面的数字格式化为前端报告的百分比 我将其写在 switch 语句中 为了方便起见 我将逻辑编写为 IF 布尔值 example mea
  • Yii2:从 URL 中删除控制器

    我正在使用高级模板 我在 SiteController 上创建了所有操作 因此我所有的 url 都是domain com site something 并且我需要从 url 中删除 site 一词 这样它将是domain com somet
  • 在 XAML 中显示窗口内的页面

    我的窗口中有一个选项卡控件 在每个选项卡项内我想要有一个不同的页面 我可以通过在 TabItem 内创建一个 Frame 并在后面的代码中使用来实现此目的 例如 frame1 Content new Pages MyPage 我怎样才能在
  • 为什么 Facebook 调试器工具无法抓取我的网站?

    我有一个网站http predictstat com http predictstat com 它由 Django 提供支持 我想确保当用户将此网站的链接发布到 Facebook 时 那里会显示一个漂亮的预览图像 标题和描述 也可以使用不同
  • BitBucket 和合并冲突

    我有一个代码源 有 3 个分支 master Branch 1 Branch 2 我正在尝试Branch 2当另一个程序员正在工作时Branch 1 在本地提取任何更改后 我最近将更改推送到了我的分支 然后我将我的分支与主分支合并 我现在正
  • 如何创建一个自动让用户登录到 devise/rails 的链接?

    我正在尝试让注册用户在我的网站上执行某些操作 因此我想通过电子邮件向他们发送直接指向此操作的链接 问题是我希望他们在单击此链接时自动登录 我可以做一些显而易见的事情 例如创建一个唯一的令牌并通过 url 传递它mysite com my f