我需要为我的web应用程序编写一个非常具体的身份验证。在端有API,它接受登录+密码对并返回结果(和一个令牌)。除了从API获得的登录令牌之外,我不想在Yii2端存储任何登录信息。这一定是我为我的客户服务的唯一方式(所以我不使用类似OAuth的应用程序)。
在Yii2中覆盖“经典”代码的最佳实践是什么?只需使用过滤器和修改用户模型?示例:
首先,我收到一个令牌,并将其保存到某个会话中:
$token = GatewayAPI::login($user, $password);
然后,我所做的每一个内部请求都将如下所示:
$result = GatewayAPI::addPosition($token, $data);
所以,我没有任何数据库可以使用,只有缓存和内存。几乎所有事情都是在API端处理的。
我的任务是实现登录检查--如果从API接收到令牌--那么它就被认为是成功的。为了在当前会话中使用该令牌(可能在memcache中,它不能向公众开放)。
发布于 2015-07-02 22:49:16
事实上,Yii2在任何地方都不需要登录/密码。如果您指的是\yii\web\User
,则不需要修改或扩展用户模型。您需要创建实现IdentityInterface的自己的类,并在配置components->user->identityClass
中将该类设置为userIdentity
[
'components' => [
'user' => [
'class' => 'yii\web\User', // not necessary, this is by default
'identityClass' => 'my\namespace\User'
]
]
]
接口中有5种方法,它们不是关于登录/通过的。您的这个类可以在数据库中存储您想要的所有内容。例如,您可以将任何流行的用户模块复制到您的项目中,从该用户模型中删除与登录/传递存储和搜索相关的所有内容,并添加您的API功能--它将工作。
UPD。添加的功能如下所示:
$token = GatewayAPI::login($user, $password);
$user = \my\namespace\User::findOne(['token' => $token]);
Yii::$app->user->login($user);
https://stackoverflow.com/questions/31178314
复制