Commit 36a24f79 by ntphat

add some logout and login

parent d29519e3
...@@ -8,12 +8,18 @@ class UsersController < ApplicationController ...@@ -8,12 +8,18 @@ class UsersController < ApplicationController
def create def create
@user = User.new(user_params) @user = User.new(user_params)
if @user.save if @user.save
log_in @user
flash[:success] = "Welcome to the Sample App!" flash[:success] = "Welcome to the Sample App!"
redirect_to @user redirect_to @user
else else
render 'new' render 'new'
end end
end end
def destroy
log_out
redirect_to root_url
end
private private
def user_params def user_params
params.require(:user).permit(:name, :email, :password, :password_confirmation) params.require(:user).permit(:name, :email, :password, :password_confirmation)
......
...@@ -10,4 +10,9 @@ module SessionsHelper ...@@ -10,4 +10,9 @@ module SessionsHelper
def logged_in? def logged_in?
!current_user.nil? !current_user.nil?
end end
def log_out
session.delete(:user_id)
@current_user = nil
end
end end
...@@ -9,4 +9,10 @@ class User < ActiveRecord::Base ...@@ -9,4 +9,10 @@ class User < ActiveRecord::Base
validates :password, length: {minimum: 6} validates :password, length: {minimum: 6}
has_secure_password has_secure_password
def User.digest(string)
cost = ActiveModel::SecurePassword.min_cost ? BCrypt::Engine::MIN_COST :
BCrypt::Engine.cost
BCrypt::Password.create(string, cost: cost)
end
end end
michael:
name: Michael Example
email: michael@example.com
password_digest: <%= User.digest('password') %>
\ No newline at end of file
require 'test_helper' require 'test_helper'
class UsersLoginTest < ActionDispatch::IntegrationTest class UsersLoginTest < ActionDispatch::IntegrationTest
def setup
@user = users(:michael)
end
test "login with invalid information" do test "login with invalid information" do
get login_path get login_path
assert_template 'sessions/new' assert_template 'sessions/new'
...@@ -10,4 +14,34 @@ class UsersLoginTest < ActionDispatch::IntegrationTest ...@@ -10,4 +14,34 @@ class UsersLoginTest < ActionDispatch::IntegrationTest
get root_path get root_path
assert flash.empty? assert flash.empty?
end end
test "login with valid information" do
get login_path
post login_path, session: { email: @user.email, password: 'password' }
assert_redirected_to @user
follow_redirect!
assert_template 'users/show'
assert_select "a[href=?]", login_path, count: 0
assert_select "a[href=?]", logout_path
assert_select "a[href=?]", user_path(@user)
end
test "login with valid information followed by logout" do
get login_path
post login_path, session: { email: @user.email, password: 'password' }
assert is_logged_in?
assert_redirected_to @user
follow_redirect!
assert_template 'users/show'
assert_select "a[href=?]", login_path, count: 0
assert_select "a[href=?]", logout_path
assert_select "a[href=?]", user_path(@user)
delete logout_path
assert_not is_logged_in?
assert_redirected_to root_url
follow_redirect!
assert_select "a[href=?]", login_path
assert_select "a[href=?]", logout_path, count: 0
assert_select "a[href=?]", user_path(@user), count: 0
end
end end
...@@ -18,5 +18,6 @@ class UsersSignupTest < ActionDispatch::IntegrationTest ...@@ -18,5 +18,6 @@ class UsersSignupTest < ActionDispatch::IntegrationTest
end end
assert_template 'users/show' assert_template 'users/show'
assert_not flash.empty? assert_not flash.empty?
assert is_logged_in?
end end
end end
...@@ -8,4 +8,7 @@ class ActiveSupport::TestCase ...@@ -8,4 +8,7 @@ class ActiveSupport::TestCase
include ApplicationHelper include ApplicationHelper
# Add more helper methods to be used by all tests here... # Add more helper methods to be used by all tests here...
def is_logged_in?
!session[:user_id].nil?
end
end end
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment