2015-06-30 4 views
5

Ich verwende Devise auth token Edelstein für die Authentifizierung einiger Teile meiner Schienen App. Aber wenn ich versuche, einen neuen Benutzer mit dem Registrierungspfad zu erstellen, gibt es mir den folgenden Fehler {"errors":["Authorized users only."]}. HierWie kann man auf den Token Auth Registration Controller zugreifen?

ist den rspec Code, den ich für den Test verwenden,

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 

Zusätzliche Informationen: Das Modellname ist 'User' und die Routen aussehen,

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

Ich verstehe, dass Das Gerät erwartet, dass der Benutzer authentifiziert wird, bevor er auf diesen Pfad zugreift, aber da dies die Benutzerregistrierung ist, muss es außerhalb der Authentifizierung sein. Können Sie eine Lösung dafür vorschlagen? Gibt es irgendeine Konfiguration, die mir hier fehlt?

+0

Haben Sie: registerable hinzugefügt in Ihrem Benutzermodell –

+0

ja. habe diese in meinem Benutzermodell, 'devise: sperrbar,: database_authenticatable,: registrierbar,: wiederherstellbar,: erinnerbar,: verfolgbar,: validierbar,: bestätigbar,: omniauthable' – quixote

+1

Haben Sie den 'Api :: UserRegistrationsController' von' Devise geerbt :: RegistrationsController' –

Antwort

4

Versuchen mit:

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

Dies wird über die folgenden Routen erstellen:

 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 

auch in einem Controller erstellen app/controllers/api/v1/api_base_controller.rb

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

    include DeviseTokenAuth::Concerns::SetUserByToken 

end 

auch zu Ihrer Datei hinzufügen app/controllers/application_controller.rb

before_action :configure_permitted_parameters, if: :devise_controller? 
+0

Danke für die Antwort. Aber ich denke, dass ich ziemlich genau dasselbe mache. Außer meinem api-Controller ist nicht in einem api-Ordner, wie Sie es in Ihrem Code haben. Das hat es nicht behoben. :(. Ich habe alle diese Routen durch devise auth Token erstellt. – quixote

+0

@quixote überprüfen Sie meine Bearbeitung über ApplicationController. –

+0

danke für die Bearbeitung. Mein Problem scheint ein Kompatibilitätsproblem mit Gerät. Ich werde ein Update veröffentlichen, wenn ich es lösen konnte vollständig. – quixote