gpt4 book ai didi

ruby-on-rails - rails5 api + devise_token_auth : no access-token and uid returns after login successfully via omniauth2

转载 作者:行者123 更新时间:2023-12-04 07:37:20 25 4
gpt4 key购买 nike

我使用 devise_token_auth 来使用 omniauth2 登录微博和 qq。是的,我正在尝试使用 rails5 api 功能!

设置并使用 omniauth test_mode 后,我似乎登录成功但没有登录信息(access_token、expiry、client 和 uid)在响应 header 中返回。

这是模型,我应用candidate而不是user作为身份验证资源。

#app/models/candidate.rb

class Candidate < ApplicationRecord
devise :database_authenticatable, :trackable, :omniauthable
include DeviseTokenAuth::Concerns::User

has_many :recruitments
attr_writer :password, :password_confirmation
end

使用虚拟 omniauth 成功信息。

#config/environment/development.rb
#OmniAuth Fake
OmniAuth.config.test_mode = true
OmniAuth.config.mock_auth[:qq_connect] = OmniAuth::AuthHash.new(
{
provider: 'qq_connect',
extra: { raw_info: { nickname: :dev } },
info: { nickname: :dev },
uid: '123456'
})
OmniAuth.config.mock_auth[:weibo] = OmniAuth::AuthHash.new(
{
provider: 'weibo',
extra: { raw_info: { nickname: :dev } },
info: { nickname: :dev },
uid: '1234567'
})

因此,当我向 http://localhost:3000/auth/weibo 发送获取请求时,应用程序会将我重定向到 http://localhost:3000//auth/weibo/callback 。它返回 200 Ok。

到目前为止,一切似乎都很好。我还检查了数据库,它显示候选者(身份验证资源)已创建,并且其 token 随着对它的每个请求而改变。

但是看看响应头,我发现里面没有任何有用的东西(access-token,expiry等)。

#Header of response

Cache-Control →max-age=0, private, must-revalidate
Connection →close
Content-Type →text/plain; charset=utf-8
ETag →W/"7215ee9c7d9dc229d2921a40e899ec5f"
Server →thin 1.6.2 codename Doc Brown
X-Content-Type-Options →nosniff
X-Frame-Options →SAMEORIGIN
X-Request-Id →d91648bb-3e69-4d23-8dfa-9eedfafeac26
X-Runtime →0.085038
X-XSS-Protection →1; mode=block

所以我的问题是如何在使用 omniauth2 登录后获取身份验证信息(如访问 token 、客户端等)

问候!

最佳答案

我遇到了同样的问题。也许这个决定对某人有帮助。

# app/controllers/overrides/omniauth_callbacks_controller.rb

module Overrides
class OmniauthCallbacksController < DeviseTokenAuth::OmniauthCallbacksController
after_action :update_auth_header, only: :omniauth_success
end
end
end

路线:

# config/routes.rb

Rails.application.routes.draw do
scope '/api/v1' do
mount_devise_token_auth_for 'User', at: 'auth', controllers: {
omniauth_callbacks: 'overrides/omniauth_callbacks'
}
end
end
end

关于ruby-on-rails - rails5 api + devise_token_auth : no access-token and uid returns after login successfully via omniauth2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36841894/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com