【问题标题】:RoR devise: sign_in always returns invalid email/passwordRoR 设计:sign_in 总是返回无效的电子邮件/密码
【发布时间】:2011-09-17 20:52:16
【问题描述】:

每次登录时,我都会收到电子邮件/密码无效的错误消息。

路线:

devise_for :users

devise_scope :users do
  get '/users/sign_out' => 'devise/sessions#destroy', :as => :destroy_user_session
  post '/users/sign_in' => 'devise/sessions#create', :as => :user_session
end

resources :users

用户模型:

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

attr_accessor :password
attr_accessible :first_name, :last_name, :email, :password, :password_confirmation, :gender, :remember_me

查看:

<% if signed_in?(:user) %>
   Hi <%= current_user.first_name %>. | Not you? <%= link_to 'Sign out', destroy_user_session_path, :method => :delete %>
<% else %>
   <%= link_to 'Sign up', signup_path %> or <%= link_to 'Sign in', user_session_path, :method => :create %>
<% end %>

我尝试将路线更改为:

get '/users/sign_in' => 'devise/sessions#new', :as => :new_user_session

并更改各自的路径,但这并没有改变任何东西。

我什至将视图中的代码更改为:

if signed_in?(:user)

到:

if user_signed_in?

并做了这些事情的组合,没有任何工作。

我确实要求设计也处理确认,我通过将生成的链接复制到浏览器来做到这一点,它第一次以用户身份登录我。它还允许我通过电子邮件确认链接更改密码,该链接也会在更改密码时让我登录。但是一旦我退出并重新登录,它就会告诉我电子邮件/密码再次无效。

谁能帮忙?

我正在使用 rails 3.0.7、devise 1.4.5、capybara 1.1.1、cucumber 1.0.6、mysql2 0.2.6 和 rake 0.8.7,如果这对任何人都有帮助的话。

谢谢

编辑:

为了帮助未来的用户,gem 实际上并没有什么问题。它工作正常。问题出在我的数据库上。出于某种原因,它从数据库中选择了一个 NULL 电子邮件,而不是提取我尝试登录的用户的信息。我现在正在研究如何解决这个问题,一旦我弄清楚就会更新。

【问题讨论】:

  • 运行迁移后重新启动服务器后,我的问题得到了解决。出于某种原因,服务器缓存了一些东西并且不接受凭据。

标签: ruby-on-rails ruby-on-rails-3 devise


【解决方案1】:

我在全新安装 Devise 时遇到了类似的问题,但我发现如果我运行 bundle update 然后重新启动我的开发服务器,它就可以工作。

起初我没有在development.log 中看到数据库查询,但是一旦我更新了我的Gemfile(以确保我使用的是最新的 Devise gem)并重新启动服务器,我现在看到了数据库查询我的日志文件,它(神奇地)工作。

希望对您有所帮助。

顺便说一句,不确定这是否会对您有所帮助...但这些是我的 Routes.rb 中的路线

 devise_for :users, :path_names => { :sign_up => "register", 
                                      :sign_in => "login", 
                                      :sign_out => "logout",
                                      :settings => "settings" }

  devise_scope :user do
    get "login", :to => "devise/sessions#new"
    get "register", :to => "devise/registrations#new"
    get "settings", :to => "devise/registrations#edit"
    get "logout",   :to => "devise/sessions#destroy"

  end

【讨论】:

  • 感谢 marcamillion。当我启动一个新应用程序并再次使用 gem 时,这将很有帮助。一开始我受够了,所以我只是从头开始构建它。我不确定我是否尝试过捆绑更新,所以不确定这是否能解决我的问题。我很高兴我不是唯一有问题的人:)
  • 有同样的问题,这解决了它。谢谢!捆绑更新对我没有任何改变,所以我认为我只需要重启服务器。奇怪的是,我能够注册一个新用户就好了
  • 我想教自己每隔一段时间重新启动服务器是合适的……这不是我第一次遇到问题,因为我在做了一些显然需要的事情后没有重新启动服务器那个。
  • bundle update 对我不起作用。我将我的 devise_for :users, controllers: {...} 替换为 devise_for :users, path_names: {...},它帮助了我。
【解决方案2】:

当我有两个时遇到了这个问题

config.authentication_keys = [ :username ]

config.authentication_keys = [ :email ]

在 config/initializers/devise.rb 中同时启用。


删除重复设置后,身份验证成功。

【讨论】:

  • 我遇到了同样的问题,只是我的 devise.rb 中没有 authentication_keys
【解决方案3】:

当我遇到这个问题时,我在

中查看了我的设计配置文件

config/initializers/devise.rb

然后我找到了我记得的部分我已更改为:用户名

config.authentication_keys = [ :username ]

我把它改回:email。最终让它发挥了作用。

【讨论】:

    【解决方案4】:

    我认为 attr_accessorattr_accessible 混淆了。你真的需要一个 attr_accessor 吗?如果不是简单地删除它。

    试试吧,请告诉我结果如何。

    最好的问候

    ED

    【讨论】:

    • 这原来是一个 mysql 问题。但无论如何,您需要为 :password 添加 attr_accessor,因为出于安全原因,它不会保存到数据库中
    • 用户模型不能开箱即用,我必须为 :email 添加 attr_accessor 以消除错误,否则它总是抱怨用户已经在 db 中,而它不是。这让我走上了正确的道路。
    【解决方案5】:

    用户名和密码都可以区分大小写。您是否检查过用户名在表中的存储方式以确保输入正确?

    根据我的经验,当它告诉您电子邮件/密码不正确时,您可能会因许多复杂的想法而分心,但最终是电子邮件或密码不正确。听起来您已经尝试过多次重置密码,所以这让我想知道用户名。您确定在设计中将正确的字段设置为用户名(即它可以是电子邮件或用户名)吗?

    【讨论】:

    • 是的,我检查了多次。我很困惑。我只是要重新安装它。
    • 我尝试卸载并重新安装它,它仍然无法正常工作。想知道这是否只是一个错误,但似乎没有其他人有这个问题?
    【解决方案6】:

    config.authentication_keys = [:username]

    config.authentication_keys = [:email]

    同时在config/initializers/devise.rb中设置会导致这个错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多