我正在使用具有多个用户的Devise Token Auth gem(https://github.com/lynndylanhurley/devise_token_auth),并且在尝试进行身份验证时遇到了一个奇怪的错误。我创建了一个devise_token_auth_group
,可以让我验证多种用户类型。但是,以下if
或elsif
条件均未得到满足,尽管before_action :authenticate_user!
似乎已通过索引操作(因为它不会渲染或重定向并允许索引行动)。如果我做错了或遗失了什么想法?
我作为购物者登录,当我向此操作发送请求时,我应该获取所有位置。起初,我得到了所有的位置。但是,在每5秒重复访问服务器后,@locations
最终为空,因为if
或elsif
条件都不符合...这让我相信之前的操作不是好好工作。作为测试,我尝试使用PostMan Rest Client在没有任何访问令牌的情况下使用此路由,并以某种方式返回一个空数组,所以我相信这就是问题所在。
devise_token_auth_group :user, contains: [:shopper, :merchant]
before_action :authenticate_user!, except: [:update]
before_action :authenticate_merchant!, only: [:update]
def index
if merchant_signed_in?
@locations = Location.where(merchant_company_id: params[:merchant_company_id])
elsif shopper_signed_in?
@locations = Location.all
end
# the @locations variable sometimes has all locations (as expected)
# but after a bunch of sequential requests, it is empty so the action renders "null"
render json: @locations, status: 200
end
答案 0 :(得分:1)
对于index
操作,您可以调用:authenticate_user!
帮助程序,因此,在此操作中,您可以访问由{生成的user_signed_in?
和current_user
帮助程序{1}}致电。
根据this part of the gem code,我们可以看到authenticate_user!
,authenticate_XXX!
和XXX_signed_in
是以current_XXX
为XXX生成的,因此{{1} }。
在这种情况下,您只能访问由devise_token_auth_group
名称生成的帮助程序:
user
devise_token_auth_group
authenticate_user!
user_signed_in?
更改代码的好方法是:
current_user