Commit d8ec4da

Stephen Peasley <s@stephenpeasley.com>
2015-01-27 02:50:25
Show flash error when credentials are bad
1 parent f440327
Changed files (4)
app
config
locales
spec
app/controllers/sessions_controller.rb
@@ -3,8 +3,14 @@ class SessionsController < ApplicationController
   layout "public"
   
   def create
-    session[:user_id] = User.authenticate(params[:username], params[:password]).id
-    render :nothing => true
+    user = User.authenticate(params[:username], params[:password])
+    if user.present?
+      session[:user_id] = user.id
+      render :nothing => true
+    else
+      flash[:warning] = t(".invalid_login")
+      redirect_to new_session_path
+    end
   end
   
   def new
config/locales/en.yml
@@ -30,6 +30,8 @@ en:
       register_button: "Register"
       login_link: "Already have an account?"
   sessions:
+    create:
+      invalid_login: "Sorry, we cannot find that account."
     new:
       username: "Username (or email)"
       password: "Password"
spec/controllers/sessions_controller_spec.rb
@@ -3,10 +3,11 @@ require "rails_helper"
 describe SessionsController do
   
   describe "#create" do
+    
+    let(:user) { create(:user, password: "password") }
+    
     context "when credentials are correct" do
       
-      let(:user) { create(:user, password: "password") }
-      
       it "logs you in with email" do
         post :create, { username: user.email, password: "password" }
         expect(session[:user_id]).to eql(user.id)
@@ -18,6 +19,20 @@ describe SessionsController do
       end
       
     end
+    
+    context "when credentials are incorrect" do
+      
+      it "displays errors" do
+        post :create, { username: user.username, password: "wrong" }
+        expect(flash[:warning]).to_not be_empty
+      end
+      
+      it "redirects to the login page" do
+        post :create, { username: user.username, password: "wrong" }
+        expect(response).to redirect_to(new_session_path)
+      end
+      
+    end
   end
   
   describe "#destroy" do
spec/models/user_spec.rb
@@ -90,7 +90,7 @@ describe User do
   end
   
   describe "#authenticate" do
-    context "retuns true when credentials are correct" do
+    context "when credentials are correct" do
       
       it "returns true" do
         user = create(:user, password: "password", password_confirmation: "password")
@@ -98,6 +98,23 @@ describe User do
       end
       
     end
+    
+    context "when the email is not registered" do
+      
+      it "returns nil" do
+        expect(User.authenticate("sofake@noteven.com", "password")).to be_nil
+      end
+      
+    end
+    
+    context "when the username is not registered" do
+      
+      it "returns nil" do
+        expect(User.authenticate("sofake", "password")).to be_nil
+      end
+      
+    end
+    
   end
   
 end