[英]omniauth redirect_callbacks not working when using devise_token_auth gem alongside regular devise
[英]Rails Devise and devise_token_auth. Not working alongside
我有一個運行Devise進行身份驗證的Rails 4.1應用程序。
為了通過移動應用程序進行訪問,我想使用推薦的devise_token_auth gem實現令牌認證。 我不使用Omniauth
現有應用程序的功能不應更改。
我做了什么:
通過gemfile安裝了devise_token_auth。
使用了生成器:rails g devise_token_auth:install用戶auth
更改了遷移以添加必填字段。 由於缺少Omniauth,遷移失敗。 所以我也安裝了它。
更改了routes.rb
devise_for :users, :skip => [:sessions, :registrations, :omniauth_callbacks]
as :user do
get 'register' => 'users/registrations#new', :as => :new_user_registration
post 'register' => 'users/registrations#create', :as => :user_registration
get 'sign_in' => 'devise/sessions#new', :as => :new_user_session
post 'sign_in' => 'devise/sessions#create', :as => :user_session
delete '/' => 'users/sessions#destroy', :as => :destroy_user_session
end
添加:
namespace :api do
scope :v1 do
mount_devise_token_auth_for 'User', at: 'auth', skip: [:omniauth_callbacks]
end
結束
在用戶模型中,我有:
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable,
:confirmable, :timeoutable, :lockable
include DeviseTokenAuth::Concerns::User
現在,當我嘗試注冊一個新用戶時,它給了我驗證錯誤:
Uid不能為空
有人有同樣的問題並解決了嗎?
我發現奇怪的是,它需要安裝Omniauth。
更新:
我覆蓋了Devise注冊控制器的create動作:
build_resource(sign_up_params)
resource.uid = resource.email
resource.provider = ''
現在,當我登錄時我得到:
{“錯誤”:[“僅授權用戶。”]}
在瀏覽器中。
將以下內容添加到app / models / user.rb:
before_validation do
self.uid = email if uid.blank?
end
為我做了。 還要確保將提供者設置為“電子郵件”。
好吧,我目前正為同樣的事情而苦苦掙扎。 試圖將devise_token_auth
添加到Devise,到目前為止,它對我來說還行不通。
就目前而言,您是在談論Devise或devise_token_auth
“ sign_up”嗎? 如果用於Devise,我應該在創建記錄之前設置uid=email
解決此問題。
該錯誤是由devise_token_auth引起的,而不是由devise引起的。 因此,從本質上講,devise_token_auth嘗試以與通常對api請求進行身份驗證相同的方式對您的常規devise路由進行身份驗證。 您的正常設計路線是通過會話而不是通過令牌進行身份驗證的,因此您會收到以下錯誤消息:
{"errors":["Authorized users only."]}
這里可能發生幾件事。 首先,請確保僅在對API控制器的操作進行令牌驗證。 因此,請確保此行包含在BaseAPIController中,而不包含在ApplicationController中。
include DeviseTokenAuth::Concerns::SetUserByToken
另一種可能性是您的route.rb中存在一些命名空間問題。 確保您有這樣的東西。 您需要首先擁有devise_for,並正確命名token_auth的名稱空間,否則它將導致其他路由的驗證問題。
Rails.application.routes.draw do
devise_for :admins
namespace :api do
scope :v1 do
mount_devise_token_auth_for 'user', at: 'auth'
end
end
end
祝好運!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.