Ruby On Rails身份验证与设计和(监狱)回调
我有一个使用设计,用户模型,没有范围的Rails应用程序。 我也在应用程序中添加了activeadmin gem,Active Admin是用于在您的应用程序中添加管理控制台的gem。它使用Devise登录用户并为管理员创建单独的admin_user模型。Ruby On Rails身份验证与设计和(监狱)回调
我允许匿名,未登录的用户创建购物车,创建一个session[:cart_id]
。如果我有用户登录要像
Cart.find(session[:cart_id]).user = current_user
我正打算使用守望者回调wardens callbacks到impliment这与车的用户,一些像这样联系起来,:不过,我得到一个
Warden::Manager.after_set_user :scope => :user do |user, auth, opts|
Cart.find(session[:cart_id]).user = user
end
错误如果我这样做:
<% unless user_signed_in? %>
抛出一个错误:admin_user user is not logged in
任何人有任何想法是怎么回事?
我看过相关的问题,但没有任何帮助:
How to access session from Warden/Devise after_authentication callback in Rails
其实原来的问题是由设置在监狱长的默认范围,在色器件初始化文件解决。
# Configure the default scope given to Warden. By default it's the first
# devise role declared in your routes (usually :user).
# config.default_scope = :user
由于活动管理路由被添加到我的用户的设计路线之上,因此adminuser成为默认用户。
该Active系统管理员使用也AdminUser
模型执行此回调。所以,也许,一个如果能解决你的问题:
Warden::Manager.after_set_user :scope => :user do |user, auth, opts|
Cart.find(session[:cart_id]).user = user if user.class == User
end
这仍然是抛出问题中提到的错误。 – macarthy
Active Admin与您的示例有什么关系?我猜这就是问题所在,你不知道为什么admin_user会显示出来? – Amala
我用一个用户实现了ActiveAdmin,我不想单独使用一个admin_user。随着您的身份验证集成,一个设计类。然后每个用户都有角色。如果你对这个解决方案感兴趣,我可以解释一下。 – Amala