【问题标题】:Devise: You have to confirm your email address before continuing设计:您必须在继续之前确认您的电子邮件地址
【发布时间】:2017-03-10 22:44:07
【问题描述】:

我将devisesimple_token_authentication 用于我的JSON API。根据simple_token_authentication,一旦我有了电子邮件和令牌,我就应该通过身份验证,从而能够访问控制器操作。但是,当我尝试以下 curl 命令时:

curl -i -H "接受:应用程序/json" -H "内容类型: 应用程序/json" -H "X-User-Email: donato@myemail.io" -H “X-用户-令牌:NFHCVtZdjy2zwT_hTezU”-X GET http://localhost:3001/users/11.json

我收到以下错误:

HTTP/1.1 401 Unauthorized X-Frame-Options: SAMEORIGIN X-XSS-Protection: 1; mode=block X-Content-Type-Options: nosniff Content-Type: application/json; charset=utf-8 Cache-Control: no-cache Set-Cookie:
_my_app_session=Q0VTT1NNNGx1K2hoK3pSMXBZNFhzaG1BSXd5cGg3WWhkTmVtekEvSkc4Q2FqSkF4anZMYVc1dENWNzJkRUhwcFN2VG8yb0xzeGk4cjFtSm5tWHIxb1E9PS0tZ3V6cXZRL0ZKR3hxSVh1NWxjeENLZz09--145a421cac94ab6be992df6b0f534968ba751231; path=/; HttpOnly X-Request-Id: 8425dd4c-d13e-465b-997e-847288ddbdf0 X-Runtime: 0.027902 Transfer-Encoding: chunked

{"error":"You have to confirm your email address before continuing."}Mac-mini-3:my_app donato$

现在检查了我的用户模型:

User.first.attributes.slice("confirmation_token", "confirmed_at", "confirmation_sent_at", "unconfirmed_email")
=> {"confirmation_token"=>"Lvh4XzW5wAeXmHVFEFQk", "confirmed_at"=>nil, "confirmation_sent_at"=>Fri, 10 Mar 2017 22:15:20 UTC +00:00, "unconfirmed_email"=>nil}

好像已经确认了?

实际上,一旦我这样做了:

user.confirmed_at = Time.now
user.save!

然后那个错误就消失了。设计有一个方法skip_confirmation!。但是,当我从我的移动应用程序创建用户时,devise 会处理所有事情。我怎么能联系到设计来调用这个方法?

【问题讨论】:

  • 你有更新吗?

标签: ruby-on-rails devise


【解决方案1】:

您是否启用了:confirmableDevise?因为这是连接到User.rb中的:confirmable模块

devise :database_authenticatable, :registerable,
       :recoverable, :rememberable, :trackable, :validatable, :confirmable

.skip_confirmation!在保存用户之前需要调用方法。

user = User.new
user.skip_confirmation!
user.save

这个 :confirmable 模块在用户模型和用户表中添加了一些字段,如果您正确填写这些字段,您将能够跳过确认。

  ## Confirmable
  # t.string   :confirmation_token
  # t.datetime :confirmed_at
  # t.datetime :confirmation_sent_at
  # t.string   :unconfirmed_email # Only if using reconfirmable

当我为我的应用程序配置可确认模块时,您可以询问我有关可确认模块的更多详细信息。

【讨论】:

  • 是的,我知道这一切,但用户的创建由 Devise 处理。那么我应该如何连接到设计以便调用skip_confirmation! ?
  • 为此,您使用 rails generate devise:controllers [scope] 生成设计控制器,您可以在其中编辑 devise/registrations_controller#create action 以便在保存之前确认用户。无论如何,您可以在 .rvm 文件夹中检查设计控制器。它将包含在 devise 文件夹内的 gem 文件中您确定您没有在某处激活 :confirmable 模块吗?你能用 CTRL+SHIFT+F 搜索confirmable吗?晚安github.com/plataformatec/devise#configuring-controllers
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-18
  • 2019-04-13
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多