【问题标题】:roles based authetication using enum使用枚举的基于角色的身份验证
【发布时间】:2019-07-08 22:38:59
【问题描述】:

我正在构建一个 Rails 应用程序,我希望在其中拥有两种类型的用户,即卖家和买家。用户可以在注册时选择他们想注册为卖家或买家的天气。

然后我使用 devise 创建了用户 在user.rb 中添加了enum role: [:seller, :buyer]

然后创建迁移以向用户添加角色

rails g migration add_role_to_users

我的迁移如下所示:

class AddRoleToUsers < ActiveRecord::Migration
   def change
      add_column :users, :role, :integer
   end
end

我使用简单的形式,在我的users registration form 中添加了

<%= f.select :role, User.roles %>

在索引页面上我正在尝试这样做:

<% if current_user.seller? %>
  <%= link_to 'New Post', new_post_path %>
  <% else %>
  hello
<% end %>

但不知何故我的用户的角色返回为零,我也检查了控制台,即使我的用户的角色返回为零,有人可以帮助我并告诉我做错了什么。谢谢你

【问题讨论】:

标签: ruby-on-rails enums devise roles


【解决方案1】:

假设您运行rake db:migrate,您的代码看起来不错。 在控制台中,任何特定用户的角色都返回 nil,因为您还没有为他们中的任何一个保存角色(例如,当您在控制台中键入 User.last.role 时,您必须得到 nil)。 但是如果你输入User.last.update_attributes(role: 1),那么在User.last的输出中你应该看到他的角色已经被修改了,现在是buyer。 如果不是这种情况,请分享您得到的错误。 要让它在注册时工作,您必须正确配置您的注册控制器,以允许设计使用新参数。您可以在this post 中找到所有信息。 简而言之,您可以分三步完成:

1/ 在你的文件中route.rb:

devise_for :users, controllers: {
       :registrations => "users/registrations" }

2/ 在您的注册控制器中:

class Users::RegistrationsController < Devise::RegistrationsController
  before_action :configure_sign_up_params, only: [:create]
  # GET /resource/sign_up
  def new
    super
  end
  #then the method called in the before action where you permit the parameters
  protected
  def configure_sign_up_params
    devise_parameter_sanitizer.permit(:sign_up, keys: [:first_name, :last_name, :birth_date, :role, :otherkeysyouneed])
  end
end

3/ 在您的注册视图中

<%= simple_form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
<%= f.select :role, User.roles %>

你应该被排序。祝你好运,并参考上面链接的帖子和设计文档,如果需要,可以在其中获得更多信息。

【讨论】:

  • 感谢@Guilliaume Bihet 是的,它可以工作,但我想知道为什么它在用户注册时选择时没有为用户分配角色,我该怎么做?
  • 不客气@Thatdude,我更新了我的帖子并提供了一些进一步的信息,因为您似乎缺少的部分是在注册时向 Devise 添加额外参数以使其充分发挥作用。
猜你喜欢
  • 2016-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-22
  • 2019-10-10
  • 2017-08-03
  • 1970-01-01
  • 2016-03-07
相关资源
最近更新 更多