gpt4 book ai didi

ruby-on-rails - Rails 设计 authentication_user 不工作

转载 作者:行者123 更新时间:2023-12-03 16:03:45 27 4
gpt4 key购买 nike

我是 Ruby on Rails 的新手,目前我想使用 Devise gem 进行身份验证系统。系统需要只有管理员才能列出用户并创建新用户。 (我通过向 Devise 生成的 User 模型添加 admin boolean 字段来添加 admin 角色)。我使用 Rails 3.2、Ruby 1.9.3 和最新的 Devise gem。

但是,下面列出的代码不会阻止未经身份验证的用户访问特定操作(索引、新建和创建)。

# users_controller.rb
class UsersController < Devise::RegistrationsController
before_filter :authenticate_user!, only: [:index, :new, :create]
before_filter :is_admin, only: [:index, :new, :create]

def index
end

private

def is_admin
current_user.admin?
end
end

==
# config/routes.rb
App::Application.routes.draw do
root to: 'static_pages#home'

get '/about', to: 'static_pages#about'

devise_scope :user do
get '/users', to: 'users#index'
end

devise_for :users, controllers: { sessions: "sessions", registrations: "users" }
end
authenticate_user!方法不起作用(例如,未经身份验证的用户仍然可以访问 /users/users/sign_up ),但也不会引发任何异常。我做了一些搜索,但不知道为什么。请帮忙。

附注。对不起我的英语不好。

更新

感谢所有的答案。我会更新 is_admin如所指出的那样正确工作。

但这里的主要问题是非登录用户可以通过 authenticate_user!首先过滤(并在 is_admin 方法上引发异常,因为这里的 current_user 将为零)。
# Here non logged in users does not redirect to sign in page when access to,
# for example, /users or /users/sign_up.
before_filter :authenticate_user!, only: [:index, :new, :create]

抱歉不明显。

最佳答案

从设计文档:

Devise will create some helpers to use inside your controllers and views. To set up a controller with user authentication, just add this before_filter:


before_filter :authenticate_user!

To verify if a user is signed in, use the following helper:


user_signed_in?

For the current signed-in user, this helper is available:


current_user

所以, :authenticate_user!只会使 Controller 上的所有其他帮助程序可用(前提是您将其放入 :before_filter 中),但您仍然有责任为签名/未签名用户定义逻辑!

请记住,Devise 是一种身份验证解决方案,而不是授权解决方案。如果您需要在不自己编写所有逻辑的情况下处理授权(看起来像您这样做),请使用像 CanCan 这样的东西,它与 Devise 一起工作得非常好。

关于ruby-on-rails - Rails 设计 authentication_user 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17402015/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com