Estoy intentando crear una API para iniciar sesión en mi aplicación de rieles con Devise y una autenticatable_token. he creado un SessionsController en mi módulo de API y escribió el siguiente código a sign_in:Iniciar sesión en una aplicación de rieles con Devise y token_authenticatable: "401 no autorizado"
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
El problema es que la aplicación plantea un 401 cuando se utiliza el inicio de sesión sin ninguna ficha.
RestClient.post "http://localhost:3000/api/v1/users/sign_in", {user: {email: "[email protected]", password: "FILTERED"}}.to_json, :content_type => :json, :accept => :json
Pero si fijo el token que fue proporcionado por el método de registro funciona:
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
Entonces ¿por qué esto? ¿Es posible deshabilitar el proceso de autenticación de tokens al realizar un inicio de sesión?
controladores
Gracias por su respuesta. Seguí las instrucciones en su sitio web pero todavía obtengo un 401. Además, obtengo un error 500 con el método '' método indefinido 'split 'para: failure: Symbol'' from' resource = warden.authenticate! (: Scope => resource_name, : recall =>: error) '. También eliminé el tipo de contenido y acepto las directivas de mi solicitud y agregué los navigational_formats. – obo
En realidad, es el 'warden.authenticate!' Que aumenta el 401. – obo
Finalmente tuve éxito. Mis errores fueron causados por una ruta incorrecta. Tuve que usar localhost: 3000/api/v1/sign_in en lugar de api/v1/users/sign_in. Por cierto, tu enlace y tus consejos en la configuración me ayudaron a hacer que las cosas funcionen correctamente. – obo