Bonjour à tous,
J’ai un souci de customisation de mon SessionsController avec Devise. L’app ayant une partie API et une partie web, voici mon fichier routes.rb :
devise_for :users, :controllers => {:sessions => 'websessions'}
resource :dashboard
root :to => "dashboard#index"
namespace :api, defaults: {format: 'json'} do
devise_for :users, :controllers => {:sessions => "api/apisessions"}
end
Ca, ça marche.
J’ai en revanche un souci avec mon websessions_controller. Je dois vérifier que le booléen FlgEnbl est à true dans ma base (ça précise que l’utilisateur est actif)
Voici mon code :
def create
resource = User.find_for_database_authentication(:email => params[:user][:email])
return failure unless resource
if resource.valid_password?(params[:user][:password])
logger.info 'Flag value' => resource.FlgEnbl
if resource.FlgEnbl == true
sign_in('user', resource)
redirect_to root_url
else
return failure
end
else
return failure
end
end
protected
def failure
warden.custom_failure!
return redirect_to new_user_session_path, alert: 'Invalid email/password, or account disabled !'
end
Quand je test, un bon login avec un mauvais mot de passe, j’ai bien mon message d’erreur, si le booléen est à true et que je rentre le bon login et le bon mot de passe ça va bien sur ma page dashboard, par contre, si le booléen est à false et que mon login et mon mot de passe sont corrects, ça renvoi sur ma page dashboard avec une erreur ‘You are already signed in.’ au lieu de m’afficher un message d’erreur et rester sur la page de login.
Le même code dans le controller pour l’api fonctionne sans souci et le json me renvoi bien mon erreur.
J’ai raté un truc ?
Merci de votre aide.