首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >以管理员身份登录时ActiveAdmin::Devise::Sessions#new中的NoMethodError

以管理员身份登录时ActiveAdmin::Devise::Sessions#new中的NoMethodError
EN

Stack Overflow用户
提问于 2018-04-03 01:32:14
回答 1查看 561关注 0票数 0

我使用ActvieAdmin作为我的应用程序的后端。

我做了以下更改,允许我的用户使用他们的username注册他们的帐户。

config/initializers/devise.rb中,我更改了config.authentication_keys = [:username]

然后,我将以下行添加到user.rb模型中

代码语言:javascript
运行
复制
validates :email,uniqueness: true 
validates :username,uniqueness: true

然后,我创建了一个迁移rails generate migration add_username_to_users username:string:uniq,然后是rake db:migrate

最后,我修改了设计视图以显示:username

我现在可以使用username作为用户登录

但是我不能再登录ActiveAdmin了。我收到以下错误消息

代码语言:javascript
运行
复制
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再次工作。有人能帮我吗?

EN

回答 1

Stack Overflow用户

发布于 2018-04-03 04:25:48

假设您在Devise中使用多个模型(AdminUserUser),如果您在devise initializer配置中更改authentication_keys,它将对这两个模型强制应用该规则。由于AdminUser中明显缺少username属性,因此此方法对您不起作用。

如果您要使用电子邮件对admin_users进行身份验证,并使用用户名用户进行身份验证,则需要在相应的型号中添加以及其他设计选项,而不是像这样添加初始化器:

代码语言:javascript
运行
复制
# 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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49615845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档