2015-06-30 8 views
5

मैं अपने रेल ऐप के कुछ हिस्सों को प्रमाणित करने के लिए Devise auth token मणि का उपयोग कर रहा हूं। लेकिन जब मैं पंजीकरण पथ के साथ एक नया उपयोगकर्ता बनाने की कोशिश करता हूं, तो यह मुझे निम्नलिखित त्रुटि {"errors":["Authorized users only."]} दे रहा है।devise टोकन ऑथ पंजीकरण नियंत्रक का उपयोग कैसे करें?

यहाँ rspec कोड है कि मैं परीक्षण के लिए उपयोग कर रहा हूँ, है

it 'creates a user using email/password combo' do 
    post api_user_registration_path, { email: 'xxx', password: 'yyy',password_confirmation: 'yyy'} 
    puts last_response.body 
    expect(last_response.body).not_to have_content('error') 
end 

अतिरिक्त जानकारी: मॉडल का नाम 'उपयोगकर्ता' है और मार्गों लगता है,

namespace :api do 
    scope :v1 do 
    mount_devise_token_auth_for 'User', at: 'auth' 
    end 
end 

मुझे लगता है कि समझ में इस प्रयोजन को एक्सेस करने से पहले उपयोगकर्ता को प्रमाणीकृत होने की उम्मीद है, लेकिन यह उपयोगकर्ता पंजीकरण है, इसे प्रमाणीकरण के बाहर होना चाहिए। क्या आप इसके लिए समाधान सुझा सकते हैं? क्या कोई विन्यास है जो मैं यहां याद कर रहा हूं?

+0

क्या आपके पास डिज़ाइन है: आपके उपयोगकर्ता मॉडल –

+0

हाँ में पंजीकरण योग्य जोड़ा गया है। मेरे उपयोगकर्ता मॉडल में, 'devise: lockable,: डेटाबेस_authenticatable,: रजिस्टर करने योग्य, पुनर्प्राप्त करने योग्य, याद रखने योग्य,: ट्रैक करने योग्य,: मान्य करने योग्य,: पुष्टि करने योग्य,: omniauthable' – quixote

+1

क्या आपने 'DEVI से 'Api :: UserRegistrationsController' का उत्तराधिकारी प्राप्त किया था :: पंजीकरण नियंत्रक –

उत्तर

4

साथ प्रयास करें:

namespace :api do 
    namespace :v1 do 
     mount_devise_token_auth_for 'User', at: '/auth' 
    end 
    end 

यह निम्न मार्गों का निर्माण करेगा:

 new_api_v1_user_session GET /api/v1/auth/sign_in(.:format)  devise_token_auth/sessions#new                                 
      api_v1_user_session POST /api/v1/auth/sign_in(.:format)  devise_token_auth/sessions#create                                
    destroy_api_v1_user_session DELETE /api/v1/auth/sign_out(.:format)  devise_token_auth/sessions#destroy                                
      api_v1_user_password POST /api/v1/auth/password(.:format)  devise_token_auth/passwords#create                                
     new_api_v1_user_password GET /api/v1/auth/password/new(.:format) devise_token_auth/passwords#new                                 
     edit_api_v1_user_password GET /api/v1/auth/password/edit(.:format) devise_token_auth/passwords#edit                                 
           PATCH /api/v1/auth/password(.:format)  devise_token_auth/passwords#update                                
           PUT /api/v1/auth/password(.:format)  devise_token_auth/passwords#update                                
cancel_api_v1_user_registration GET /api/v1/auth/cancel(.:format)   devise_token_auth/registrations#cancel                               
     api_v1_user_registration POST /api/v1/auth(.:format)    devise_token_auth/registrations#create                               
    new_api_v1_user_registration GET /api/v1/auth/sign_up(.:format)  devise_token_auth/registrations#new                                
    edit_api_v1_user_registration GET /api/v1/auth/edit(.:format)   devise_token_auth/registrations#edit                                
           PATCH /api/v1/auth(.:format)    devise_token_auth/registrations#update                               
           PUT /api/v1/auth(.:format)    devise_token_auth/registrations#update                               
           DELETE /api/v1/auth(.:format)    devise_token_auth/registrations#destroy                               
    api_v1_auth_validate_token GET /api/v1/auth/validate_token(.:format) devise_token_auth/token_validations#validate_token 

इसके अलावा app/controllers/api/v1/api_base_controller.rb

class Api::V1::BaseApiController < ActionController::Base 

    include DeviseTokenAuth::Concerns::SetUserByToken 

end 

में एक नियंत्रक बनाने इसके अलावा अपने फ़ाइल में जोड़ने के app/controllers/application_controller.rb

before_action :configure_permitted_parameters, if: :devise_controller? 
+0

उत्तर के लिए धन्यवाद। लेकिन मुझे लगता है कि मैं वही काम कर रहा हूं। मेरे एपीआई नियंत्रक को छोड़कर एक एपीआई फ़ोल्डर में नहीं है, जैसे आपके पास यह आपके कोड में है। उसने इसे ठीक नहीं किया। :(। मेरे पास इन सभी मार्गों को ऑथ टोकन तैयार करके बनाया गया है। – quixote

+0

@quixote एप्लिकेशन कंट्रोलर के बारे में मेरे संपादन की जांच करें। –

+0

संपादन के लिए धन्यवाद। मेरा मुद्दा तैयार करने के साथ एक संगतता मुद्दा प्रतीत होता है। जब मैं इसे हल कर सकता हूं तो मैं एक अद्यतन पोस्ट करूंगा पूरी तरह। – quixote

संबंधित मुद्दे