Commit d8ec4da
Changed files (4)
app
controllers
config
locales
spec
controllers
models
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