feat: 用户模块使用 sanctum 认证
This commit is contained in:
@@ -6,6 +6,7 @@ use Illuminate\Broadcasting\InteractsWithSockets;
|
||||
use Illuminate\Foundation\Events\Dispatchable;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
use Modules\User\Models\User;
|
||||
|
||||
class Login
|
||||
{
|
||||
@@ -18,7 +19,7 @@ class Login
|
||||
*/
|
||||
public function __construct(
|
||||
public Request $request,
|
||||
public string $token
|
||||
public User $user
|
||||
) {
|
||||
}
|
||||
}
|
||||
|
@@ -4,10 +4,12 @@ namespace Modules\User\Http\Controllers;
|
||||
|
||||
use Catch\Base\CatchController as Controller;
|
||||
use Catch\Exceptions\FailedException;
|
||||
use Illuminate\Auth\RequestGuard;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Event;
|
||||
use Modules\User\Events\Login;
|
||||
use Modules\User\Models\User;
|
||||
|
||||
class AuthController extends Controller
|
||||
{
|
||||
@@ -15,11 +17,14 @@ class AuthController extends Controller
|
||||
* @param Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function login(Request $request)
|
||||
public function login(Request $request): array
|
||||
{
|
||||
$token = Auth::guard(getGuardName())->attempt($request->only(['email', 'password']));
|
||||
/* @var User $user */
|
||||
$user = User::query()->where('email', $request->get('email'))->first();
|
||||
|
||||
Event::dispatch(new Login($request, $token));
|
||||
$token = $user?->createToken('token')->plainTextToken;
|
||||
|
||||
Event::dispatch(new Login($request, $user));
|
||||
|
||||
if (! $token) {
|
||||
throw new FailedException('登录失败!请检查邮箱或者密码');
|
||||
@@ -34,10 +39,11 @@ class AuthController extends Controller
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function logout()
|
||||
public function logout(): bool
|
||||
{
|
||||
// Auth::guard(Helper::getGuardName())->logout();
|
||||
/* @var User $user */
|
||||
$user = Auth::guard(getGuardName())->user();
|
||||
|
||||
return true;
|
||||
return $user->currentAccessToken()->delete();
|
||||
}
|
||||
}
|
||||
|
@@ -23,20 +23,16 @@ class Login
|
||||
{
|
||||
$request = $event->request;
|
||||
|
||||
$this->log($request, (bool) $event->token);
|
||||
$this->log($request, (bool) $event->user);
|
||||
|
||||
if ($event->token) {
|
||||
/* @var User $user */
|
||||
$user = Auth::guard(getGuardName())->user();
|
||||
|
||||
$user->login_ip = $request->ip();
|
||||
$user->login_at = time();
|
||||
$user->remember_token = $event->token;
|
||||
$user->save();
|
||||
if ($event->user) {
|
||||
$event->user->login_ip = $request->ip();
|
||||
$event->user->login_at = time();
|
||||
$event->user->remember_token = null;
|
||||
$event->user->save();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* login log
|
||||
*
|
||||
|
@@ -52,7 +52,6 @@ class LogOperate extends Model
|
||||
[$module, $controller, $action] = CatchAdmin::parseFromRouteAction();
|
||||
|
||||
$requestStartAt = app(Kernel::class)->requestStartedAt()->getPreciseTimestamp(3);
|
||||
|
||||
$params = $request->all();
|
||||
// 如果参数过长则不记录
|
||||
if (!empty($params)) {
|
||||
@@ -62,7 +61,6 @@ class LogOperate extends Model
|
||||
}
|
||||
|
||||
$timeTaken = intval(microtime(true) * 1000 - $requestStartAt);
|
||||
|
||||
$this->storeBy([
|
||||
'module' => $module,
|
||||
'action' => $controller . '@' . $action,
|
||||
|
@@ -5,8 +5,8 @@ namespace Modules\User\Models;
|
||||
use Catch\Base\CatchModel as Model;
|
||||
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
|
||||
use Illuminate\Database\Eloquent\Casts\Attribute;
|
||||
use Laravel\Sanctum\HasApiTokens;
|
||||
use Modules\User\Models\Traits\UserRelations;
|
||||
use Tymon\JWTAuth\Contracts\JWTSubject;
|
||||
use Illuminate\Auth\Authenticatable;
|
||||
|
||||
/**
|
||||
@@ -23,9 +23,9 @@ use Illuminate\Auth\Authenticatable;
|
||||
* @property int $updated_at
|
||||
* @property string $remember_token
|
||||
*/
|
||||
class User extends Model implements AuthenticatableContract, JWTSubject
|
||||
class User extends Model implements AuthenticatableContract
|
||||
{
|
||||
use Authenticatable, UserRelations;
|
||||
use Authenticatable, UserRelations, HasApiTokens;
|
||||
|
||||
protected $fillable = [
|
||||
'id', 'username', 'email', 'avatar', 'password', 'remember_token', 'creator_id', 'status', 'department_id', 'login_ip', 'login_at', 'created_at', 'updated_at', 'deleted_at'
|
||||
@@ -57,25 +57,6 @@ class User extends Model implements AuthenticatableContract, JWTSubject
|
||||
*/
|
||||
protected array $formRelations = ['roles', 'jobs'];
|
||||
|
||||
/**
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function getJWTIdentifier(): mixed
|
||||
{
|
||||
return $this->getKey();
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a key value array, containing any custom claims to be added to the JWT.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getJWTCustomClaims(): array
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* password
|
||||
*
|
||||
|
@@ -1,6 +1,5 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
||||
use Illuminate\Database\Seeder;
|
||||
use Modules\User\Models\User;
|
||||
|
||||
|
Reference in New Issue
Block a user