簡體   English   中英

rails5 api + devise_token_auth:通過omniauth2成功登錄后沒有訪問令牌和uid返回

[英]rails5 api + devise_token_auth: no access-token and uid returns after login successfully via omniauth2

我正在使用devise_token_auth在weibo和qq上進行omniauth2登錄。 是的,我正在嘗試使用rails5 api功能!

在設置並使用omniauth test_mode之后,我似乎登錄成功但登錄信息( access_token,expiry,client和uid )在響應標題中返回。

這是模型,我應用候選人而不是用戶作為身份驗證資源。

#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發送get請求時,應用程序會將我重定向到http:// localhost:3000 // auth / weibo / callback 它返回200 Ok。

到目前為止,一切似乎都很好。 此外,我還檢查了DB,它顯示了候選(身份驗證資源)已創建,並且其令牌隨着每個請求而更改。

但是看看響應的標題,我發現內部沒有任何用處(訪問令牌,到期等)。

#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登錄后獲取身份驗證信息(如訪問令牌,客戶端等)

問候!

我有同樣的問題。 也許這個決定對某人有幫助。

# 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM