2

所以我有一个带有 Devise 设置的 Rails 应用程序。我已经:confirmable在我的桌子上设置了Users,并且发送确认电子邮件非常有效。

但是,我遇到了一个未经确认的用户尝试登录的小问题。

当在登录中输入无效的电子邮件/密码组合时,我会收到一条提示“无效的电子邮件或密码。”的提示。但是,如果未经确认的用户正确登录,他们将被重定向回/users/sign_in,但没有针对 的闪烁消息"You have to confirm your account before continuing.",该消息在 中定义/config/locales/devise.en.yml

我已经覆盖了这些方法:

RegistrationsController) :new, :create

会话控制器):创建

ConfirmationsController) :after_confirmation_path_for

当未经确认的用户使用正确的凭据登录时,Devise 究竟会做什么?我尝试binding.pry在我的方法的顶部放置一个声明sessions#create,但它从来没有命中它,这意味着 Devise 必须对此进行某种外部检查。我试图查看源代码无济于事。

这是日志状态正在发生的事情:

Started POST "/users/sign_in" for 127.0.0.1 at 2013-10-18 15:04:26 -0400
Processing by SessionsController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"03kQgiMGyXcq/nW8jlVyGkGDw1Q9lpP+JZ03e+LZHPU=", "user"=>{"email"=>"dummy@example.com", "password"=>"[FILTERED]"}, "commit"=>"Login"}
  [1m[35mUser Load (0.7ms)[0m  SELECT `users`.* FROM `users` WHERE `users`.`email` = 'dummy@example.com' LIMIT 1
  [1m[36m (0.2ms)[0m  [1mBEGIN[0m
  [1m[35m (0.1ms)[0m  COMMIT
Completed 401 Unauthorized in 90ms


Started GET "/users/sign_in" for 127.0.0.1 at 2013-10-18 15:04:27 -0400
Processing by SessionsController#new as HTML
  Rendered devise/shared/_links.haml (0.6ms)
  Rendered devise/sessions/new.html.haml within layouts/application (5.0ms)
  Rendered layouts/_header.html.haml (0.9ms)
  Rendered layouts/_navigation.html.haml (0.6ms)
  Rendered layouts/_footer.html.haml (0.9ms)
Completed 200 OK in 33ms (Views: 28.0ms | ActiveRecord: 0.0ms)

所以看起来该sessions#create方法确实被击中了。所以我不确定从这里去哪里。任何帮助,将不胜感激!

config/routes.rb

 devise_for :users, :controllers => {
    :registrations => "registrations", 
    :sessions => "sessions", 
    :confirmations => "confirmations"}
4

1 回答 1

1

弄清楚了。当设计中的某些内容调用下的消息之一时:failures,它不会将消息放入 flash[:notice],而是将消息放入 flash[:alert],所以我只需要添加

#alert= alert

给我的哈姆尔。

资料来源:新安装 Rails + Devise 时总是出现 401 Unauthorized

于 2013-10-18T20:56:08.697 回答