我使用ActvieAdmin
作为我的应用程序的后端。
我做了以下更改,允许我的用户使用他们的username
注册他们的帐户。
在config/initializers/devise.rb
中,我更改了config.authentication_keys = [:username]
然后,我将以下行添加到user.rb
模型中
validates :email,uniqueness: true
validates :username,uniqueness: true
然后,我创建了一个迁移rails generate migration add_username_to_users username:string:uniq
,然后是rake db:migrate
最后,我修改了设计视图以显示:username
我现在可以使用username作为用户登录
但是我不能再登录ActiveAdmin了。我收到以下错误消息
NoMethodError in ActiveAdmin::Devise::Sessions#new
Showing /Users/dadi/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activeadmin-1.2.1/app/views/active_admin/devise/sessions/new.html.erb where line #8 raised:
undefined method `username' for #<AdminUser id: nil, email: "", created_at: nil, updated_at: nil>
我不确定如何才能让ActiveAdmin log_in再次工作。有人能帮我吗?
发布于 2018-04-03 04:25:48
假设您在Devise中使用多个模型(AdminUser
和User
),如果您在devise initializer配置中更改authentication_keys
,它将对这两个模型强制应用该规则。由于AdminUser
中明显缺少username
属性,因此此方法对您不起作用。
如果您要使用电子邮件对admin_users进行身份验证,并使用用户名对用户进行身份验证,则需要在相应的型号中添加以及其他设计选项,而不是像这样添加初始化器:
# AdminUser
class AdminUser < ApplicationRecord
...
devise :database_authenticatable,..., authentication_keys: [:email]
...
end
# User
class User < ApplicationRecord
...
devise :database_authenticatable,..., authentication_keys: [:username]
...
end
如果您想为这两种类型的用户允许任何电子邮件/用户名,您可以使用follow this link
https://stackoverflow.com/questions/49615845
复制相似问题