Ho la mia applicazione per le rotaie e mi trovo di fronte a un grosso problema con il dispositivo. Ho un regolatore:Come posso accedere a un utente con inventare?
class Users::SessionsController < Devise::SessionsController
prepend_before_filter :require_no_authentication, :only => [ :new, :create ]
include Devise::Controllers::InternalHelpers
def new
clean_up_passwords(build_resource)
respond_to do |format|
format.html { render :layout => "sessions" }
format.mobile
end
end
# POST /resource/sign_in
def create
resource = User.find_by_email(params[:user][:email])
resource = warden.authenticate!(:scope => resource_name, :recall => "#{controller_path}#new")
set_flash_message :notice, :signed_in
sign_in_and_redirect(resource_name, resource)
end
end
Il problema è che non registra l'utente in, si ferma sempre a questa linea
resource = warden.authenticate!(:scope => resource_name, :recall => "#{controller_path}#new")
Ho anche messo tonnellate di logger nei file di gemme effettivi per vedere se ho potrei vedere tutto fuori ma niente e non ho davvero idea di come sistemarlo. Se commento questa riga, l'utente si connette ma fallisce se l'e-mail non è nel db e funziona per qualsiasi password (che non è sicuramente la soluzione giusta)
Come posso risolvere questo problema?
UPDATE
questo funziona, ma sembra molto hackish
# POST /resource/sign_in
def create
resource = User.find_by_email(params[:user][:email])
redirect_to(new_user_session_path, :notice => 'Invalid Email Address or Password. Password is case sensitive.') and return if resource.encrypted_password.blank?
bcrypt = BCrypt::Password.new(resource.encrypted_password)
password = BCrypt::Engine.hash_secret("#{params[:user][:password]}#{resource.class.pepper}", bcrypt.salt)
valid = Devise.secure_compare(password, resource.encrypted_password)
# resource = warden.authenticate!(:scope => resource_name, :recall => "#{controller_path}#new")
if valid
set_flash_message :notice, :signed_in
sign_in_and_redirect(resource_name, resource)
else
redirect_to(new_user_session_path, :notice => 'Invalid Email Address or Password. Password is case sensitive.') and return
end
end
questo li registra in prescindere, anche se la password è errata o non – Trace
Controllare ' user.valid_password? (params [: password]) 'prima, quindi. –
Ho provato esattamente come questo, ma ho sbagliato numero di argomenti (2 per 0). qualche idea? – ishwr