iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 13
1
Software Development

從零開始的Laravel RESTful api系列 第 13

Day 13 : user ( controller -- login )

前面實作完註冊功能後,接下來就來講解如何登入。機制大致上如下:

  1. 記住使用者輸入的 email、password
    避免與原本 email 和 password 的欄位混淆,在前面各自加上 'auth_'
public function login(Request $request){
    $email = $request->auth_email;
    $password = $request->auth_password;

    /*
    ...
    */
}
  1. 先檢查資料庫中有沒有含該 email 的使用者
public function login(Request $request){
    /*
    ...
    */

    $user = User::where('email', $email)->first();
    if(!$user){
        return response(['message' => 'Login failed. Please check email id']);
    }
    
    /*
    ...
    */
    
}
  1. 若存在該使用者,再檢查 Hash 過後的 password 有無符合原先存取的 password
    public function login(Request $request){
            
        /*
        ...
        */
        
        if(!Hash::check($password, $user->password)){
            return response(['message' => 'Login failed. Please check password']);
        }
        
       /*
       ...
       */
            
    }
  1. 成功登入後系統會取得 api_token,更安全的方式為每次登入都生成並存入新的 token,但此處為了測試方便,所以可以先不加沒關係
    public function login(Request $request){
         /*
        ...
        */
        
        // 較安全:每次登入重新生成新的 token
        $user->update(['api_token', Str::random(60)]);
        
        return response(['message' => 'Login successfully', 'api_token' => $user->api_token]);
        
    }

完整程式碼:
*UsersController

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\User;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Str;

class UsersController extends Controller
{
    /*
    ...
    */

    public function login(Request $request){
        $email = $request->auth_email;
        $password = $request->auth_password;

        $user = User::where('email', $email)->first();
        if(!$user){
            return response(['message' => 'Login failed. Please check email id']);
        }
        if(!Hash::check($password, $user->password)){
            return response(['message' => 'Login failed. Please check password']);
        }
        return response(['message' => 'Login successfully', 'api_token' => $user->api_token]);
    }
}

Postman 實測

  • 錯誤情形1:email

    image alt

  • 錯誤情形2:password incorrect

    image alt

  • 正確

    image alt

會員註冊和登入功能大致完成,目前尚未實作驗證 ( Authorization ),等待 user 的所有 API 做好之後就會開始動工。接下來介紹 index 和 show,敬請期待!


上一篇
Day 12: user ( Controller -- register )
下一篇
Day 14 : user ( Controller -- index & show )
系列文
從零開始的Laravel RESTful api30

尚未有邦友留言

立即登入留言