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

noo*_*oob 20 ruby-on-rails devise ruby-on-rails-3

每次登录时,都会收到错误信息,表明电子邮件/密码无效.

路线:

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
Run Code Online (Sandbox Code Playgroud)

用户模型:

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

attr_accessor :password
attr_accessible :first_name, :last_name, :email, :password, :password_confirmation, :gender, :remember_me
Run Code Online (Sandbox Code Playgroud)

视图:

<% 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 %>
Run Code Online (Sandbox Code Playgroud)

我尝试将路线更改为:

get '/users/sign_in' => 'devise/sessions#new', :as => :new_user_session
Run Code Online (Sandbox Code Playgroud)

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

我甚至改变了视图中的代码:

if signed_in?(:user)
Run Code Online (Sandbox Code Playgroud)

至:

if user_signed_in?
Run Code Online (Sandbox Code Playgroud)

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

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

有人可以帮忙吗?

我正在使用rails 3.0.7,设计1.4.5,capybara 1.1.1,黄瓜1.0.6,mysql2 0.2.6和rake 0.8.7,如果这有助于任何人.

谢谢

编辑:

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

mar*_*ion 11

我在Devise的全新安装上遇到了类似的问题,但我发现如果我跑了bundle update然后重新启动我的开发服务器就行了.

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

希望有所帮助.

顺便说一句,不知道这对你有帮助......但这些是我的路线 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
Run Code Online (Sandbox Code Playgroud)


小智 8

当我同时遇到这个时,我遇到了这个问题

config.authentication_keys = [ :username ]
Run Code Online (Sandbox Code Playgroud)

config.authentication_keys = [ :email ]
Run Code Online (Sandbox Code Playgroud)

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


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


Riz*_*ski 6

当我遇到这个问题时,我通过我的Devise配置文件返回

配置/初始化/ devise.rb

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

config.authentication_keys = [ :username ]
Run Code Online (Sandbox Code Playgroud)

我改回来了:email.最终使它成功.