Sto provando a creare un'API per accedere all'app Rails con Devise e un token authenticatable. ho creato un SessionsController nel mio modulo API e ha scritto il seguente codice a sign_in:Accedi a un'app per rails con Devise e token_authenticatable: "401 non autorizzato"
module Api
module V1
class SessionsController < Devise::SessionsController
def create
resource = warden.authenticate!(scope: resource_name, recall: "#{controller_path}#new")
sign_in(resource_name, resource)
if current_user
if !current_user.authentication_token
current_user.reset_authentication_token!
end
render json: {success: true, auth_token: resource.authentication_token, email: resource.email}
else
invalid_login_attempt
end
end
protected
def invalid_login_attempt
warden.custom_failure!
render json: {success: false, message: "Error with your login or password"}, status: 401
end
end
end
end
Il problema è che l'applicazione genera un 401 quando uso il login senza alcun token.
RestClient.post "http://localhost:3000/api/v1/users/sign_in", {user: {email: "[email protected]", password: "FILTERED"}}.to_json, :content_type => :json, :accept => :json
Ma se ho impostato il token che è stato fornito con il metodo di iscrizione funziona:
response_json = RestClient.post "http://localhost:3000/api/v1/users/sign_in?auth_token=#{@token}", {user: {email: "[email protected]", password: "FILTERED"}}.to_json, :content_type => :json, :accept => :json
Allora, perché questo? È possibile disabilitare il processo di autenticazione del token quando si esegue un accesso?
controllori
Grazie per la risposta. Ho seguito le istruzioni sul tuo sito web ma ottengo ancora un 401. Inoltre ottengo un errore 500 con il metodo 'non definito' split 'per: failure: Symbol'' da 'resource = warden.authenticate! (: Scope => nome_risorsa, : recall =>: failure) '. Ho anche rimosso il tipo di contenuto e accettato le direttive dalla mia richiesta e aggiunto il navigational_formats. – obo
In realtà è il 'warden.authenticate! 'Che alza il 401. – obo
Alla fine ci sono riuscito. I miei errori sono stati causati da una rotta sbagliata. Ho dovuto usare localhost: 3000/api/v1/sign_in invece di api/v1/users/sign_in. Tra l'altro il tuo link e i tuoi consigli nella configurazione mi hanno aiutato a far funzionare le cose correttamente. – obo