主题
用户认证
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,可能是以下原因:
- 用户未登录或 Token 已过期
- 请求未经过
AuthMiddleware中间件 - Token 格式不正确