Skip to content

用户认证

CatchAdmin 如何获取登录用户信息? 获取当前登录人信息的完整指南

CatchAdmin 提供了 Admin Facade 来处理后台用户认证相关的操作,包括获取当前登录用户、获取登录人信息、用户 ID、退出登录等功能。本文将详细介绍如何在 CatchAdmin 后台管理系统中获取和操作登录用户信息。

快速开始

在 CatchAdmin 中获取当前登录用户非常简单,只需要引入 Admin Facade 即可:

php
use Catch\Facade\Admin;

// 获取当前登录用户
$user = Admin::currentLoginUser();

// 获取当前登录用户 ID
$userId = Admin::id();

获取当前登录用户

在控制器或其他业务逻辑中,可以通过 Admin::currentLoginUser() 获取当前登录的用户模型。这是 CatchAdmin 中获取登录人信息最常用的方法:

php
use Catch\Facade\Admin;

// 获取当前登录用户
$user = Admin::currentLoginUser();

// 获取用户信息
$username = $user->username;
$email = $user->email;

TIP

currentLoginUser() 返回的是 Modules\User\Models\User 模型实例,可以直接访问用户的所有属性和关联关系。

获取当前登录用户 ID

如果只需要获取用户 ID,可以使用更简洁的方式:

php
use Catch\Facade\Admin;

// 获取当前登录用户 ID
$userId = Admin::id();

用户认证

Admin::auth() 方法用于验证用户身份,通常在中间件中调用。如果你需要手动进行用户认证,可以这样使用:

php
use Catch\Facade\Admin;

try {
    $user = Admin::auth();
    // 认证成功,继续业务逻辑
} catch (\Illuminate\Auth\AuthenticationException $e) {
    // 认证失败处理
}

INFO

一般情况下,不需要手动调用 auth() 方法,CatchAdmin 的 AuthMiddleware 中间件会自动处理用户认证。

退出登录

用户退出登录时,调用 logout() 方法:

php
use Catch\Facade\Admin;

Admin::logout();

该方法会:

  • 清除用户的个人令牌缓存
  • 删除数据库中的 Token 记录

清理缓存

清理指定用户令牌缓存

php
use Catch\Facade\Admin;

// 清理当前用户的令牌缓存
Admin::clearUserPersonalToken();

// 清理指定 tokenId 的缓存
Admin::clearUserPersonalToken($tokenId);

清理所有缓存用户

php
use Catch\Facade\Admin;

Admin::clearAllCachedUsers();

WARNING

clearAllCachedUsers() 会清理所有已缓存的用户信息,请谨慎使用。

使用示例

在控制器中使用

php
<?php

namespace Modules\User\Http\Controllers;

use Catch\Base\CatchController;
use Catch\Facade\Admin;

class ProfileController extends CatchController
{
    /**
     * 获取当前用户信息
     */
    public function info()
    {
        $user = Admin::currentLoginUser();

        return [
            'id' => $user->id,
            'username' => $user->username,
            'email' => $user->email,
        ];
    }

    /**
     * 更新当前用户信息
     */
    public function update(Request $request)
    {
        $user = Admin::currentLoginUser();

        $user->update($request->only(['username', 'email']));

        return $user;
    }
}

在服务类中使用

php
<?php

namespace Modules\Order\Services;

use Catch\Facade\Admin;

class OrderService
{
    /**
     * 创建订单
     */
    public function create(array $data)
    {
        // 获取当前操作用户 ID
        $data['creator_id'] = Admin::id();

        return Order::create($data);
    }
}

API 参考

方法返回值说明
Admin::auth()User用户认证,返回用户模型
Admin::currentLoginUser()User|null获取当前登录用户信息
Admin::id()int|null获取当前登录用户 ID
Admin::logout()true退出登录
Admin::clearUserPersonalToken($tokenId)void清理指定令牌缓存
Admin::clearAllCachedUsers()void清理所有缓存用户

常见问题

如何判断用户是否已登录?

php
use Catch\Facade\Admin;

if (Admin::currentLoginUser()) {
    // 用户已登录
} else {
    // 用户未登录
}

获取登录用户信息返回 null 怎么办?

如果 Admin::currentLoginUser() 返回 null,可能是以下原因:

  1. 用户未登录或 Token 已过期
  2. 请求未经过 AuthMiddleware 中间件
  3. Token 格式不正确