feat: 用户模块使用 sanctum 认证

This commit is contained in:
JaguarJack
2023-02-15 17:47:12 +08:00
parent 77abbd5eaf
commit cb7047e8fa
8 changed files with 24 additions and 495 deletions

View File

@@ -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
) {
}
}

View File

@@ -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();
}
}

View File

@@ -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
*

View File

@@ -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,

View File

@@ -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
*

View File

@@ -1,6 +1,5 @@
<?php
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Modules\User\Models\User;