2025-04-14

创建一个新项目

$ laravel new api_example

 

添加认证包,在用户登陆成功以后返回一个token. 

$ composer require laravel/sanctum

 

创建一个api的Controller

$ php artisan make:controller api/UserController --api

 

创建登陆接口

use App\Http\ApiBase;
use App\Models\User;
use Illuminate\Auth\AuthenticationException;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class UserController extends ApiBase
{
   /**
     * User login api.
     *
     * @param Request $request
     * @return mixed
     */
    public function login(Request $request) {
        if (Auth::attempt([
            'username' => $request->get('username'),
            'password' => $request->get('password')
        ])) {
            $authUser = Auth::user();
            $success['token'] =  $authUser->createToken('example')->plainTextToken;
            $user_info = $authUser->toArray();
            $success['info'] = $user_info;

            return $this->responseSuccess($success);
        } else {
            return $this->responseError('Unauthorised', 401);
        }
    }

}

 

创建用户模型models/User.php

<?php

namespace App\Models;

use App\Http\BaseModel;
use Illuminate\Auth\Authenticatable;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;

/**
 * Class User.
 */
class User extends BaseModel implements AuthenticatableContract
{
    use Authenticatable;
    use HasApiTokens, HasFactory, Notifiable;

    public $timestamps = false;
    public $hidden = ['password'];

    protected $fillable = ['password', 'grade', 'name', "gender", "mobile", "email", "wechat", "qq", "url", "remark", "setting"];

    protected $primaryKey = 'user_id';

    protected $table = 'user';

}

 

创建路由routers/api.php.

use Illuminate\Support\Facades\Route;

// 不需要权限
Route::post('/user/login', [\App\Http\Controllers\api\UserController::class, 'login']);

// 以下接口都需要权限
Route::group(['namespace' => 'App\Http\Controllers\api', 'middleware' => 'auth:sanctum'], function() {

    // user.
    Route::post('/user/update/{id}', 'UserController@update');
    Route::post('/user/update_self', 'UserController@update_self');
    Route::get('/user/show/{id}', 'UserController@show');
    Route::get('/user/info', 'UserController@info');
    Route::get('/user/list', 'UserController@index');

});

 

 

 

标签: Laravel