我在devise_auth_token
应用中使用rails-api
gem。我使用omniauth_google_oauth2
gem和我的应用程序进行身份验证,但它非常错误所以我决定采用不同的方法。
我的api应用程序中有一条路由会响应
{ "url": google-oauth-login-url }
前端应用程序使用该路由将其放入使用google btn登录。
用户点击btn后,他们将被重定向到google oauth页面,在填写详细信息后,他们将被重定向到前端主页,并在网址中包含Google代码。
前端应用程序将使用代码向api服务器发送请求,服务器将再次向谷歌服务器请求交换该谷歌代码以获取访问令牌,刷新令牌以及所有这些。
服务器收到这些令牌后,服务器再次向谷歌服务器发送另一个请求以获取用户个人资料。
我在获取用户个人资料信息后不知道如何注册用户。
我如何注册?注册后,如何签名或向前端应用程序发送身份验证令牌?在进行api调用时,将在每个标头中使用身份验证令牌。
有什么想法吗?
答案 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
我使用令牌保存用户并返回访问令牌。