RoR设计:sign_in始终返回无效的电子邮件/密码

时间:2011-09-17 20:52:16

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

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

路线:

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,设计1.4.5,capybara 1.1.1,黄瓜1.0.6,mysql2 0.2.6和rake 0.8.7,如果这有助于任何人。

由于

编辑:

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

6 个答案:

答案 0 :(得分:10)

我在全新安装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

答案 1 :(得分:8)

当我同时使用

时遇到了这个问题
config.authentication_keys = [ :username ]

config.authentication_keys = [ :email ]

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


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

答案 2 :(得分:6)

当我遇到这个问题时,我通过

中的Devise配置文件返回
  

配置/初始化/ devise.rb

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

config.authentication_keys = [ :username ]

我将其更改回:email。最终使它成功。

答案 3 :(得分:1)

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

尝试一下,请让我知道它是怎么回事。

祝你好运

ED

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

config.authentication_keys = [:username]

config.authentication_keys = [:email]

在config / initializers / devise.rb中同时设置将导致此错误。