我正在使用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
我现在可以用用户名
的用户身份登录但我无法再登录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再次运行。 谁能帮我这个?
答案 0 :(得分:0)
假设您正在使用具有Devise(AdminUser
和User
)的多个模型,如果更改设计初始化程序配置中的authentication_keys
,它将为这两个模型强加规则。由于username
明显缺少AdminUser
属性,因此此方法对您无效。
如果您要对 admin_users with email 和用户名为进行身份验证,则需要添加authentication_keys
以及其他设计选项各个模型而不是初始化程序如下:
# 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