2015-03-09 28 views
8

Tôi có Ứng dụng Rails 4.1 đang chạy với Devise để xác thực.Rails Devise và devise_token_auth. Không hoạt động cùng với

Để truy cập qua ứng dụng dành cho thiết bị di động, tôi muốn triển khai xác thực mã thông báo bằng đá quý devise_token_auth được đề xuất. Tôi không sử dụng Omniauth

Không thể thay đổi chức năng của ứng dụng hiện có.

Điều tôi đã làm:

Đã cài đặt devise_token_auth qua gemfile.

sử dụng máy phát điện: đường ray g devise_token_auth: cài đặt tài khoản auth

Thay đổi sự di cư để thêm các trường bắt buộc. Di chuyển không thành công do thiếu Omniauth. Vì vậy, tôi cũng đã cài đặt nó.

routes.rb Thay đổi

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 

thêm:

namespace :api do 
scope :v1 do 
    mount_devise_token_auth_for 'User', at: 'auth', skip: [:omniauth_callbacks] 
end 

cuối

Trong tài khoản Mẫu i có:

devise :database_authenticatable, :registerable, 
    :recoverable, :rememberable, :trackable, :validatable, 
    :confirmable, :timeoutable, :lockable 
include DeviseTokenAuth::Concerns::User 

Bây giờ khi tôi cố gắng để sign_up mới người dùng nó mang lại cho tôi va lỗi lidation:

Uid không được để trống

Có ai có cùng sự cố và giải quyết không?

Điều tôi thấy lạ là nó cần phải cài đặt Omniauth.

Cập nhật:

tôi ghi đè lên bộ điều khiển đăng ký lập mưu tạo ra hành động:

build_resource(sign_up_params) 
resource.uid = resource.email 
resource.provider = '' 

Bây giờ khi tôi sign_in tôi nhận được:

{ "lỗi": [ "chỉ những người dùng ủy quyền."] }

trong Trình duyệt.

+0

bạn đang sử dụng phiên bản đá quý nào? Tôi đang cố gắng làm như vậy nhưng tôi nhận được một lỗi. –

+0

hiện tại: devise_token_auth 0.1.32.beta2 – yaster

+0

Bạn đã nói "Đã thay đổi di chuyển để thêm các trường bắt buộc". Đây là những gì? Có hướng dẫn nào bạn theo dõi không? Tôi đang cố gắng thêm devise_token_auth vào triển khai Devise hiện có, tùy chỉnh của mình. –

Trả lời

0

Tôi hiện đang vật lộn với điều tương tự. Đang cố gắng thêm devise_token_auth để phát triển và nó không hoạt động cho đến nay đối với tôi.

Theo cách này, bạn có đang nói về "sign_up" cho Devise hoặc devise_token_auth không? Nếu nó là cho Devise, tôi cho rằng thiết lập uid=email trước khi tạo bản ghi sẽ giải quyết vấn đề này.

+0

Tôi cần có cả hai. Đăng ký qua Devise và thông qua devise_token_auth – yaster

4

Thêm dòng sau vào ứng dụng/mô hình/user.rb:

before_validation do 
    self.uid = email if uid.blank? 
end 

đã làm nó cho tôi. Ngoài ra, hãy đảm bảo nhà cung cấp được đặt thành "email" cho "nhà cung cấp".

0

Lỗi này được nâng lên bởi devise_token_auth, không phải bằng cách đưa ra.Về cơ bản, devise_token_auth đang cố gắng xác thực các tuyến đường phát triển bình thường của bạn giống như cách nó thường xác thực yêu cầu api. Các tuyến đường phát triển thông thường của bạn là xác thực thông qua phiên, không phải thông qua mã thông báo, do đó bạn sẽ gặp phải lỗi này:

{"errors":["Authorized users only."]} 

Có một vài điều có thể xảy ra ở đây. Trước tiên, hãy đảm bảo rằng bạn chỉ đang tìm kiếm xác thực mã thông báo trên các hành động của các bộ điều khiển API của bạn. Vì vậy, hãy chắc chắn rằng dòng này được bao gồm trong BaseAPIController của bạn, và không có trong ApplicationController của bạn.

include DeviseTokenAuth::Concerns::SetUserByToken 

Khả năng khác là bạn có một số vấn đề về không gian tên trong tuyến đường của mình.rb. Hãy chắc chắn rằng bạn có một cái gì đó như thế này. Trước tiên, bạn cần phải có devise_for và token_auth được đặt tên đúng cách hoặc nó sẽ gây ra các vấn đề xác thực trên các tuyến đường khác của bạn.

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 

Chúc may mắn!

Các vấn đề liên quan