首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Yii2上编写自定义身份验证机制的最佳实践

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

Stack Overflow用户
提问于 2015-07-02 07:36:50
回答 1查看 867关注 0票数 3

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

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

首先,我收到一个令牌,并将其保存到某个会话中:

代码语言:javascript
运行
复制
$token = GatewayAPI::login($user, $password);

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

代码语言:javascript
运行
复制
$result = GatewayAPI::addPosition($token, $data);

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

我的任务是实现登录检查--如果从API接收到令牌--那么它就被认为是成功的。为了在当前会话中使用该令牌(可能在memcache中,它不能向公众开放)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-03 06:49:16

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

代码语言:javascript
运行
复制
[
    'components' => [
        'user' => [
            'class' => 'yii\web\User', // not necessary, this is by default
            'identityClass' => 'my\namespace\User' 
        ]
    ]
] 

接口中有5种方法,它们不是关于登录/通过的。您的这个类可以在数据库中存储您想要的所有内容。例如,您可以将任何流行的用户模块复制到您的项目中,从该用户模型中删除与登录/传递存储和搜索相关的所有内容,并添加您的API功能--它将工作。

UPD。添加的功能如下所示:

代码语言:javascript
运行
复制
$token = GatewayAPI::login($user, $password);
$user = \my\namespace\User::findOne(['token' => $token]);
Yii::$app->user->login($user);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31178314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档