iT邦幫忙

2021 iThome 鐵人賽

DAY 12
0
Software Development

跟著官方文件學習Laravel, 並實作出一個會員登入系統系列 第 12

Day12 跟著官方文件學習Laravel-Session

因為Http是無狀態的,我們可以利用session讓使用者表明自己的身份。

首先我們必須先建立一個session的table

php artisan session:table
php artisan migrate

這時在我們的資料庫里面,會出現一個session的表格

這時我們來看看能不能再登入後保持session,所以我們在loginController中,登入後存session

public function loginWithORM(Request $request){
        $account = $request->input('account');
        $password = $request->input('password');
        $user = User::query()
        ->where('account', $account)
        ->first();
        if(Hash::check($password, $user->password)){
            session(['user' => $user]);
            return "你好,我的帳號是".$user->account;
        }
        return Redirect::back()->withErrors(['帳號或密碼錯誤']);
    }

我們這時候在寫一個nav.blade.php去確認我們的session狀態如何,並讓welcome.blade.php include

@if(!Session::has('user'))
<div style="float:right;">
    <a href="login">登入</a>
</div>
@endif
@if(Session::has('user'))
<div style="float:right;">
    <span>你好,{{ Session::get('user.name') }}</span>
    <a href="logout">登出</a>
</div>
@endif

同時,我們把welcome.blade.php改寫成我們的首頁

<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">

        <title>Laravel</title>

    </head>
    <body>
        @include('nav')
        <h1>我是首頁</h1>
    </body>
</html>

controller在登入成功後,我們讓他導入首頁

public function loginWithORM(Request $request){
        $account = $request->input('account');
        $password = $request->input('password');
        $user = User::query()
        ->where('account', $account)
        ->first();
        if(Hash::check($password, $user->password)){
            session(['user' => $user]);
            return view('welcome');
        }
        return Redirect::back()->withErrors(['帳號或密碼錯誤']);
    }

好的!登入測試看看,首先我們進入首頁,會看到這個畫面

按下登入後,導到登入畫面,我們打完正確的帳密後,按下登入,畫面回到首頁長這樣

成功取得session的值,這時候不管重整畫面還是關掉重開,session都會保持住,但我們在登出時,會希望他的session被拿掉,所以我們要做一個登出的controller,記得要加上route唷!

class LogoutController extends Controller{
    public function __invoke(Request $request)
    {
        $request->session()->flush();
        return view('welcome');
    }
}

試試登出吧,這時登出session就被消除了!我們今天完成了session保持狀態,明天見囉~


上一篇
Day11 跟著官方文件學習Laravel-利用Eloquent ORM改寫專案
下一篇
Day13 跟著官方文件學習Laravel-了解RESTful API
系列文
跟著官方文件學習Laravel, 並實作出一個會員登入系統30

尚未有邦友留言

立即登入留言