创建一个新项目
$ 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');
});