2016-11-03 3 views
0

Ich bekomme diesen Fehler, wenn ich versuche, einen Benutzer anzumelden, und kann nicht herausfinden, warum. Es ist komisch, denn wenn ich den folgenden Code ausführe, bekomme ich den BCrypt-Fehler, aber wenn ich die find_by-Zeile (Zeile 7) von can_email (die E-Mail-Adresse des Kandidaten) zu can_name (Vorname des Kandidaten) ändere, bekomme ich den Fehler überhaupt nicht Der Benutzer meldet sich einfach nicht an, wenn auf der Webseite die Fehlermeldung "Ungültiges Kennwort/E-Mail-Kombination" angezeigt wird, unabhängig davon, ob die Kombination richtig ist oder nicht. Es hat etwas mit dem Passwort zu tun, aber ich kann es nicht genau bestimmen.BCrypt :: Errors :: InvalidHash in SessionsController # erstellen, wenn ich versuche, einen Benutzer anzumelden? (Ruby on Rails)

class SessionsController < ApplicationController 

def new 
end 

def create 
candidate = Candidate.find_by_can_email(params[:can_email]) 
if candidate && candidate.authenticate(params[:password]) **Error highlights this line** 
      session[:candidate_id] = candidate.id 
      redirect_to candidate 
else 
    flash.now[:error]="Invalid email/password combination" 
    render 'new' 
    end 
end 

def destroy 
    if signed_in? 
      session[:candidate_id] = nil 
    else 
      flash[:notice] = "You need to log in first" 
    end 
    redirect_to login_path 
end 

Ende

Antwort

0

die SessionController Nachdem ich nehme an, dass Sie eine Route haben als

# This is just a sample 
post 'login' => "sessions#create" # gives login_path 

folgt Da es keine Sitzung Modell sein ich nehme an, Sie haben die Form als

form_for(:session, url: login_path) 
folgt

Jetzt, wenn Sie zB can_email und Passwort sammeln, erhalten Sie

{session: {password: 'foo', can_email: '[email protected]'}} 

Zugriff auf params[:session] gibt den Hash enthält, E-Mail und passowrd Also ich denke, Sie sollten sie erhalten, wie

def create 
    candidate = Candidate.find_by(can_email: params[:session][:can_email]) 
    if candidate && candidate.authenticate(params[:session][:password]) 
    # login the user 
    else 
    # whatever 
    end 
end 
folgt