iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 24
1
Software Development

後端新手 使用laravel 從零開始 到開出api系列 第 24

Day24 laravel 登入token驗證

Day24 laravel 登入token驗證

之前已經講過專案的登入及註冊的Controller怎麼寫,現在來講講怎麼驗證token,達到記住user登入狀態的功能。

在laravel專案中,你可以使用middleware來達成驗證token的功能。
而這個middleware設置會在所有的route,除了登入及註冊的route

middleware 驗證內容

<?php

namespace App\Http\Middleware;

use Closure;
use App\Users;
use Carbon\Carbon;

class TokenMiddlewar
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $token = $request->header('userToken');
        $userData = Users::where('remember_token', $token)->first();
        #將User資訊合併進去request,傳到後端
        $request->merge(['userData' => $userData]);
        if (isset($userData->remember_token)) {
            $tokenTime = $userData->updated_at->addDays(1);
            #判斷token是否過期
            if ($tokenTime < Carbon::now()) {
                return response()->json(['status' => false, 'error' => 'token out time'], 401);
            }
            return $next($request);
        } else {
            return response()->json(['status' => false, 'error' => 'token false'], 401);
        }
    }
}

上面這段code是我的Todolist的驗證middleware

說明:

  • 21
    將client端的request header裏面的token取出來(此範例是設計token必須放在header裏面)
  • 22
    用剛剛從request裡拿到的token去db中找到該user的那筆資料。
  • 24
    將取出的資料跟request合併(因為我controller中有很多需要用到user data的部份,我不想在controller再讀取一次db而想出來的辦法)
  • 25
    判斷22行的程式是否有找到user data若是沒有則回傳錯誤401
  • 26~30
    將userData中的更新時間加上1天當作token的時效(登入取得token時update_at會刷新),若是取得token時間+一天已小於現在時間就回傳錯誤401。
  • 31
    token成功過關,前往下一層

以上是小弟我的token驗證方法,這下使用者登入系統都講完了呢,不過雖然現在使用者登入後才可以使用這個專案,但是現在還沒有中份利用這個系統呢,我們會希望user跟user之前不會混在一起操作資料,我的資料只有我能看到,也只有我能操作,這部份就下回分曉嘍,Bye!


上一篇
Day23 laravel Validation 驗證格式 FormRequest篇
下一篇
Day25 設計使用者關聯的CRUD
系列文
後端新手 使用laravel 從零開始 到開出api30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言