Devise - Rails 4 - 无法登录 [英] Devise - Rails 4 - Not able to login
问题描述
devise
设置与自定义字段。我可以在注册后登录,但我无法从登录页面登录。用户注册正常,我在数据库表中有 username
, password
等。 有人可以告诉我我失踪了吗?我的用户模型非常基本。
这是它的样子 -
class User< ActiveRecord :: Base
#包含默认设计模块。其他可用的是:
#:token_authenticatable,:confirmable,
#:lockable,:timeoutable and:omniauthable
devise:database_authenticatable,:registerable,
:recoverable,,rememberable,可追踪,可验证
验证:用户名,唯一性=> true,:presence => {:message => ' - 用户名不能为空'}
验证:first_name,:presence => {:message => - 名字不能为空!
private
def user_params
params.require()。permit(:first_name,:last_name,:username,:email,:password ,:password_confirmation)
end
end
我检查过我的视图我传递正确的参数。
我的应用程序控制器中有以下内容 -
class ApplicationController < ActionController :: Base
pre>
#通过引发异常来防止CSRF攻击。
#对于API,您可能需要使用:null_session。
protect_from_forgery with::exception
layout:layout_by_resource
before_filter:configure_permitted_params,if::devise_controller?
def layout_by_resource
如果devise_controller?
devise
else
应用程序
结束
结束
保护
def configure_permitted_params
devise_parameter_sanitizer.for(:sign_up){| u | u.permit(:username,:first_name,:last_name,:password,:password_confirmation,:email)}
end
end
我检查了数据库表,我确实有
用户名
和密码
(encrypted_password即是)。我的身份验证密钥设置为用户名
。
不知道我在这里缺少什么。我有
devise 3.0.0
解决方案在你的应用程序控制器中你有允许的参数为sign_up,但不是sign_in。所以我将
configure_permitted_parameters
方法更改为此,它应该可以工作:def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_in){| u | u.permit(:username,:password,:remember_me)}
devise_parameter_sanitizer.for(:sign_up){| u | u.permit(:username,:first_name,:last_name,:password,:password_confirmation,:email)}
end
I just started using Rails 4. I got
devise
setup with custom fields. I'm able to login after I register, but I'm not able to login from the login page. The user registration goes in fine, and I haveusername
,password
etc in the database table.Can somebody tell me what I'm missing? My User model is very basic. Here is how it looks like -
class User < ActiveRecord::Base # Include default devise modules. Others available are: # :token_authenticatable, :confirmable, # :lockable, :timeoutable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable validates :username, :uniqueness => true, :presence => {:message => '- Username cannot be blank'} validates :first_name, :presence => { :message => " - Firstname cannot be blank!"} private def user_params params.require().permit(:first_name, :last_name, :username, :email, :password, :password_confirmation) end end
I've checked my view and I'm passing the right parameters.
I have the following in my application controller -
class ApplicationController < ActionController::Base # Prevent CSRF attacks by raising an exception. # For APIs, you may want to use :null_session instead. protect_from_forgery with: :exception layout :layout_by_resource before_filter :configure_permitted_params, if: :devise_controller? def layout_by_resource if devise_controller? "devise" else "application" end end protected def configure_permitted_params devise_parameter_sanitizer.for(:sign_up) {|u| u.permit(:username, :first_name, :last_name, :password, :password_confirmation, :email) } end end
I checked the database table and I do have
username
andpassword
(encrypted_password that is). I have my authentication keys set tousername
.Not sure what I'm missing here. I have
devise 3.0.0
解决方案In your application controller you have permitted params for sign_up, but not for sign_in. So i you change the
configure_permitted_parameters
method to this, it should work:def configure_permitted_parameters devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:username, :password, :remember_me) } devise_parameter_sanitizer.for(:sign_up) {|u| u.permit(:username, :first_name, :last_name, :password, :password_confirmation, :email) } end
这篇关于Devise - Rails 4 - 无法登录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!