gpt4 book ai didi

php - 在 Yii2 上编写自定义身份验证机制的最佳实践

转载 作者:搜寻专家 更新时间:2023-10-31 21:06:42 24 4
gpt4 key购买 nike

我需要为我的网络应用程序编写一个非常具体的身份验证。旁边有 API 接受登录名 + 密码对并返回结果(和 token )。除了我从 API 获得的登录 token 外,我不想在 Yii2 端存储任何登录信息。这一定是我授权我的客户的唯一方式(所以我不使用类似 OAuth 的应用程序)。

在 Yii2 中覆盖“经典”代码的最佳实践是什么?只使用过滤器并修改用户模型?示例:

首先,我收到一个 token 并将其保存在某处用于 session :

$token = GatewayAPI::login($user, $password);

然后,我所做的每个内部请求都将如下所示:

$result = GatewayAPI::addPosition($token, $data);

所以,我没有任何数据库可以使用,只有缓存和内存。几乎所有事情都在 API 端处理。

我的任务是实现登录检查 - 如果从 API 收到 token - 那么它被认为是成功的。并存储该 token 以供在当前 session 中使用(可能在内存缓存中,它不得向公众开放)。

最佳答案

事实上,Yii2 在任何地方都不需要登录名/密码。如果你的意思是 \yii\web\User,你不需要修改或扩展 User 模型。您需要创建自己的实现 IdentityInterface 的类,并在您的配置 components->user->identityClass 中将此类设置为 userIdentity:

[
'components' => [
'user' => [
'class' => 'yii\web\User', // not necessary, this is by default
'identityClass' => 'my\namespace\User'
]
]
]

界面中有5个方法,它们与登录/密码无关。您的此类可能会在您的数据库中存储您想要的所有内容。例如,您可以将任何流行的用户模块复制到您的项目中,从该用户模型中删除与通过登录/密码存储和搜索相关的所有内容,并添加您的 API 功能 - 它会起作用。

更新。您添加的功能将如下所示:

$token = GatewayAPI::login($user, $password);
$user = \my\namespace\User::findOne(['token' => $token]);
Yii::$app->user->login($user);

关于php - 在 Yii2 上编写自定义身份验证机制的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31178314/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com