2015-06-30 8 views
5

Sto usando Devise auth token gem per l'autenticazione di alcune parti della mia app di rotaie. Ma quando provo a creare un nuovo utente con il percorso di registrazione, mi sta dando il seguente errore {"errors":["Authorized users only."]}.Come accedere al controller di registrazione dell'autore token di sviluppo?

Ecco il codice RSpec che sto usando per il test,

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 

Ulteriori informazioni: il nome del modello è 'utente' e gli itinerari sembra,

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

Capisco che il dispositivo prevede che l'utente venga autenticato prima di accedere a questo percorso, ma trattandosi della registrazione dell'utente, deve essere al di fuori dell'autenticazione. Puoi suggerire una soluzione per questo? C'è qualche configurazione che mi manca qui?

+0

avete ideato: registrabile aggiunto nel modello utente –

+0

sì. avere questi nel mio modello Utente, 'escogitare: bloccabile,: database_authenticatable,: registrabile,: ripristinabile,: memorizzabile,: rintracciabile,: validatable,: confirmable,: omniauthable' – quixote

+1

Hai ereditato 'Api :: UserRegistrationsController' da' Devise :: RegistrationsController' –

risposta

4

Prova con:

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

Questo creerà i seguenti itinerari:

 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 

Crea anche un controller in app/controllers/api/v1/api_base_controller.rb

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

    include DeviseTokenAuth::Concerns::SetUserByToken 

end 

aggiungi anche al file app/controllers/application_controller.rb

before_action :configure_permitted_parameters, if: :devise_controller? 
+0

Grazie per la risposta. Ma penso di fare più o meno la stessa cosa. Tranne il mio controller api non si trova in una cartella api, come nel codice. Questo non l'ha risolto :(. Ho creato tutte queste rotte create con token di autenticazione. – quixote

+0

@quixote controlla la mia modifica su ApplicationController –

+0

grazie per la modifica.Il mio problema sembra essere un problema di compatibilità con Devise. Pubblicherò un aggiornamento quando potrei risolverlo completamente. – quixote

Problemi correlati