之前的文章中,已經講過Eloquent語法的CRUD以及製作api,其實到了這一步,應該已經能做出Todolist的api的吧,應該吧?
不過現在的Todolist還只有骨架,現在我們要進一步延伸,將這骨架套上登入機制,讓你的專案能夠判斷使用者。
製作登入功能可以說是後端必經之路,這功能必須有一個完好的機制,才不會造成駭客有漏洞可鑽。使用者登入後,後端必須記住使用者已經登入了,以前使用PHP寫登入功能時,都是使用session記住登入者狀態,現在這篇文章要使用token來驗證使用者
token的機制是這樣的:
token會紀錄再db中的users表,每次要使用api都會在middleware確認request的token是否跟db中的token一致,以這樣的機制達到記住使用者登入狀態的功能。
以下是我Todolist專案的原始碼:
public function login(Request $request)
{
$password = $request->password;
$email = $request->email;
$dbUser = Users::where('email', $email)->first();
#判斷帳號是否存在
if (!$dbUser) {
return response()->json(['status' => false, 'error' => 'email or password false'], 400);
}
#判斷密碼是否正確、給亂數token
$dbPassword = $dbUser->password;
if (password_verify($password, $dbPassword)) {
#避免token重複
do {
$token = Str::random(15);
$tokenCheck = Users::where('remember_token', $token)->first();
if (isset($tokenCheck)) {
$sameToken = true;
} else {
$sameToken = false;
}
} while ($sameToken);
$dbUser->update(['remember_token' => $token]);
return response()->json(['status' => true, 'login_data' => ['userToken' => $token]], 200);
} else {
return response()->json(['status' => false, 'error' => 'email or password false'], 400);
}
}
說明:
以上是我的登入方法,在這邊公開自己的code有點不好意思,若是有高手看到還請不吝賜教。laravel自己其實有一套登入功能可以用,但是我認為若要客制化登入系統,還是自己寫的東西方便,以上是我個人的想法,今天就講到這邊啦,Bye!