多种用户类型 - 组认证 - 设计令牌认证

时间:2015-06-29 14:32:08

标签: ruby-on-rails authentication devise access-token

我正在使用具有多个用户的Devise Token Auth gem(https://github.com/lynndylanhurley/devise_token_auth),并且在尝试进行身份验证时遇到了一个奇怪的错误。我创建了一个devise_token_auth_group,可以让我验证多种用户类型。但是,以下ifelsif条件均未得到满足,尽管before_action :authenticate_user!似乎已通过索引操作(因为它不会渲染或重定向并允许索引行动)。如果我做错了或遗失了什么想法?

我作为购物者登录,当我向此操作发送请求时,我应该获取所有位置。起初,我得到了所有的位置。但是,在每5秒重复访问服务器后,@locations最终为空,因为ifelsif条件都不符合...这让我相信之前的操作不是好好工作。作为测试,我尝试使用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

1 个答案:

答案 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

More documentation here