【发布时间】:2019-04-22 02:14:44
【问题描述】:
我在配置中试过这个:
### Popular gems integration
config.authenticate_with do
warden.authenticate! scope: :user
end
config.current_user_method(&:current_user)
在这里,访问/admin 让我陷入了登录循环。我登录然后被重定向到登录页面。
我之前尝试过
class Ability
include CanCan::Ability
def initialize(user)
# Define abilities for the passed in user here. For example:
#
user ||= User.new # guest user (not logged in)
if user.admin?
在 Rails 管理配置中使用 CanCanCan 身份验证。这导致用户始终为零。即使我投入了
config.current_user_method(&:current_user)
如何解决此问题以验证是否为管理员?
编辑:在会话控制器中
if user.admin
redirect_to rails_admin_url
else
render json: user
end
然后我卡在重定向回登录页面。
路线:
Rails.application.routes.draw do
mount RailsAdmin::Engine => '/admin', as: 'rails_admin'
devise_for :users, controllers: { sessions: :sessions },
path_names: { sign_in: :login }
... then many resources lines
编辑:
会话控制器:
class SessionsController < Devise::SessionsController
protect_from_forgery with: :null_session
def create
user = User.find_by_email(sign_in_params[:email])
puts sign_in_params
if user && user.valid_password?(sign_in_params[:password])
user.generate_auth_token
user.save
if user.admin
redirect_to rails_admin_url
else
render json: user
end
else
render json: { errors: { 'email or password' => ['is invalid'] } }, status: :unprocessable_entity
end
end
end
Rails 管理员配置,试试这个:
### Popular gems integration
config.authenticate_with do
redirect_to merchants_path unless current_user.admin?
end
config.current_user_method(&:current_user)
在应用控制器中:
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
helper_method :current_user
试过了,current_user 是 nil。
【问题讨论】:
-
你能显示你的
config/routes.rb吗?范围取决于您在config/routes.rb中定义的内容 -
所以,设置 current_user 不起作用,但在会话控制器中显式设置 session[:user_id] 然后 config.authenticate_with 做 redirect_tocommerce_path 除非 User.find(session[:user_id]).admin?以 rails admin config 结束
标签: ruby-on-rails devise rails-admin cancancan