返回身份验证令牌

时间:2017-11-10 13:57:01

标签: ruby-on-rails authentication devise

我在devise_auth_token应用中使用rails-api gem。我使用omniauth_google_oauth2 gem和我的应用程序进行身份验证,但它非常错误所以我决定采用不同的方法。

我的api应用程序中有一条路由会响应

{ "url": google-oauth-login-url }

前端应用程序使用该路由将其放入使用google btn登录。

用户点击btn后,他们将被重定向到google oauth页面,在填写详细信息后,他们将被重定向到前端主页,并在网址中包含Google代码。

前端应用程序将使用代码向api服务器发送请求,服务器将再次向谷歌服务器请求交换该谷歌代码以获取访问令牌,刷新令牌以及所有这些。

服务器收到这些令牌后,服务器再次向谷歌服务器发送另一个请求以获取用户个人资料。

我在获取用户个人资料信息后不知道如何注册用户。

我如何注册?注册后,如何签名或向前端应用程序发送身份验证令牌?在进行api调用时,将在每个标头中使用身份验证令牌。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

Registration是将数据存储到数据库的过程。因此,当您获得用户个人资料并将其保存到数据库时,这意味着 - 您已经注册了它。

当您使用此令牌将其他字段保存到用户表并将其发送到前端时,我看到sign in的进程。因此,客户端知道access_token,服务器知道谁是此令牌的所有者。

答案 1 :(得分:0)

我不得不深入研究宝石代码才能做到这一点

def log_in_or_create_employee(user_info)
    @resource = Employee.find_by email: user_info["emails"][0]["value"]
    if @resource.nil?
        password = Devise.friendly_token[0,10]
        @resource = Employee.new({
            name: user_info["displayName"], 
            admin: true, 
            first_name: CustomRegex.japanese?(user_info["name"]["givenName"]) ? '' : user_info["name"]["givenName"],
            last_name: CustomRegex.japanese?(user_info["name"]["familyName"]) ? '' : user_info["name"]["familyName"],
            email: user_info["emails"][0]["value"],
            password: password,
            password_confirmation: password
            })
    end
        @client_id = SecureRandom.urlsafe_base64(nil, false)
  @token     = SecureRandom.urlsafe_base64(nil, false)
  @resource.tokens[@client_id] = {
          token: BCrypt::Password.create(@token),
          expiry: (Time.now + DeviseTokenAuth.token_lifespan).to_i
  }
  @resource.skip_confirmation!
        @resource.save!

        return render json: {client_id: @client_id, expiry: @resource.tokens[@client_id][:"expiry"],
                                                 token: @token, uid: @resource.uid
                                                }
end

我使用令牌保存用户并返回访问令牌。

相关问题