Yii2如何实现用户身份认证_Yii2实现用户身份认证方法【安全】

老伟大大_4085

老伟大大_4085

2026-04-12

307人浏览

原创

yii2提供五种用户认证方法:一、数据库模型认证,通过activerecord与identityinterface实现;二、静态数组认证,适用于测试场景;三、http basic认证,用于restful api;四、query parameter token认证,适合第三方集成;五、bearer token认证,兼容oauth2标准。

yii2如何实现用户身份认证_yii2实现用户身份认证方法【安全】

如果您在 Yii2 应用中需要验证用户身份以保障系统安全,则需通过框架内置的认证机制与 IdentityInterface 实现协同工作。以下是实现用户身份认证的多种方法:

一、基于数据库的用户模型认证

该方法适用于拥有持久化用户数据(如 users 表)的典型 Web 应用,通过 ActiveRecord 模型与数据库交互完成登录凭证校验和会话管理。

1、确保数据库中存在 users 表,包含 id、username、password_hash、auth_key、access_token 等字段。

2、使用 Gii 生成 User 模型:执行命令 php yii gii model --tableName=users,并确认生成的类继承自 yii\db\ActiveRecord。

3、在 User 类中实现 IdentityInterface 接口,重写 findIdentity()、findIdentityByAccessToken()、validatePassword()、getAuthKey()、validateAuthKey() 等必需方法。

4、在 config/web.php 的 components 配置中启用 user 组件,并指定 identityClass 为 app\models\User:

'user' => ['class' => 'yii\web\User', 'identityClass' => 'app\models\User', 'enableAutoLogin' => true]

二、无数据库的静态用户认证

该方法适用于开发测试、内部工具或极简后台场景,用户凭据直接硬编码在 PHP 数组中,不依赖数据库查询,降低部署复杂度。

1、在 app/models/User.php 中定义静态 $users 数组,每个元素包含 id、username、password(建议为密码哈希值)、authKey 和 accessToken 字段。

2、重写 findIdentity() 方法,遍历 $users 数组匹配 id;重写 findByUsername() 方法,按 username 查找并返回匹配项。

3、validatePassword() 方法中使用 Yii::$app->security->validatePassword($password, $this->password_hash) 进行比对(若存储的是哈希值);若为明文则直接 strcmp 比较。

4、确保 getAuthKey() 返回数组中对应用户的 authKey 值,validateAuthKey() 则比对传入参数与该值是否一致。

三、HTTP Basic 认证(服务端接口专用)

该方法适用于 RESTful API 场景,客户端在 Authorization 请求头中携带 Base64 编码的 username:password,由服务端即时解码并校验,不依赖 session 或 cookie。

1、在控制器的 behaviors() 方法中配置 CompositeAuth 或单独使用 HttpBasicAuth:

'authenticator' => ['class' => \yii\filters\auth\HttpBasicAuth::className(), 'auth' => [$this, 'auth'] ]

Yii Framework 2.0.51
Yii Framework 2.0.51

Yii Framework 2.0.51 官方 Basic 应用模板,适合旧项目兼容、升级验证和开发测试。

下载

2、在控制器中定义 auth() 回调函数,接收 $username 和 $password 参数,调用 User::findByUsername($username) 并验证密码。

3、若验证失败,抛出 yii\web\UnauthorizedHttpException 异常,返回 401 状态码。

4、注意:仅应在 HTTPS 环境下启用该方式,防止凭据被中间人截获。

四、Query Parameter Token 认证

该方法适用于第三方系统集成或简易 API 调用,将 access-token 作为 URL 查询参数传递(如 ?access-token=abc123),适合无 Cookie 支持或跨域调试场景。

1、在控制器 behaviors() 中启用 QueryParamAuth:

'authenticator' => ['class' => \yii\filters\auth\QueryParamAuth::className(), 'tokenParam' => 'access-token']

2、确保 User 类已实现 findIdentityByAccessToken($token) 方法,从数据库或缓存中查找匹配的用户记录。

3、调用 $user->loginByAccessToken($token, get_class($authMethod)) 完成身份绑定,返回 Identity 实例。

4、注意:access-token 必须具备唯一性、时效性与防爆破能力,建议配合 Redis 存储并设置 TTL。

五、Bearer Token 认证(标准 OAuth2 兼容)

该方法符合 RFC 6750 规范,客户端在 Authorization 请求头中携带 Bearer 后缀的 JWT 或随机 token,适用于前后端分离架构及移动端接入。

1、在控制器 behaviors() 中配置 HttpBearerAuth:

'authenticator' => \yii\filters\auth\HttpBearerAuth::className()

2、User 类中 findIdentityByAccessToken() 方法需支持解析 Bearer token 并校验其签名、过期时间与作用域(scope)。

3、推荐使用 yii2-jwt 扩展生成和验证 JWT,将用户 ID、角色、签发时间等信息嵌入 payload。

4、token 验证失败时,HttpBearerAuth 自动触发 handleFailure(),返回 401 响应且不执行后续动作。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

yii

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
ThinkPHP表单验证与数据安全处理实战
ThinkPHP表单验证与数据安全处理实战

本专题聚焦 ThinkPHP 在表单处理中的验证与安全机制,系统讲解验证器使用、自定义规则、场景验证以及错误提示处理。内容涵盖 XSS 防护、SQL 注入防御、数据过滤与输入校验等关键安全措施。通过实际案例,帮助开发者构建安全可靠的数据处理流程。

2026.03.30

241

20

cookie
cookie

Cookie 是一种在用户计算机上存储小型文本文件的技术,用于在用户与网站进行交互时收集和存储有关用户的信息。当用户访问一个网站时,网站会将一个包含特定信息的 Cookie 文件发送到用户的浏览器,浏览器会将该 Cookie 存储在用户的计算机上。之后,当用户再次访问该网站时,浏览器会向服务器发送 Cookie,服务器可以根据 Cookie 中的信息来识别用户、跟踪用户行为等。

2023.06.30

11899

10

document.cookie获取不到怎么解决
document.cookie获取不到怎么解决

document.cookie获取不到的解决办法:1、浏览器的隐私设置;2、Same-origin policy;3、HTTPOnly Cookie;4、JavaScript代码错误;5、Cookie不存在或过期等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.11.23

1126

5

阻止所有cookie什么意思
阻止所有cookie什么意思

阻止所有cookie意味着在浏览器中禁止接受和存储网站发送的cookie。阻止所有cookie可能会影响许多网站的使用体验,因为许多网站使用cookie来提供个性化服务、存储用户信息或跟踪用户行为。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

804

5

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

2025.08.19

1906

14

session失效的原因
session失效的原因

session失效的原因有会话超时、会话数量限制、会话完整性检查、服务器重启、浏览器或设备问题等等。详细介绍:1、会话超时:服务器为Session设置了一个默认的超时时间,当用户在一段时间内没有与服务器交互时,Session将自动失效;2、会话数量限制:服务器为每个用户的Session数量设置了一个限制,当用户创建的Session数量超过这个限制时,最新的会覆盖最早的等等。

2023.10.17

580

4

session失效解决方法
session失效解决方法

session失效通常是由于 session 的生存时间过期或者服务器关闭导致的。其解决办法:1、延长session的生存时间;2、使用持久化存储;3、使用cookie;4、异步更新session;5、使用会话管理中间件。

2023.10.18

876

5

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

2025.08.19

1906

14

PHP Yii框架专题
PHP Yii框架专题

本专题专注于PHP主流框架Yii的应用,系统讲解MVC架构、路由机制、数据库操作、表单处理、安全验证与RESTful API 开发等核心内容。通过电商网站、后台管理系统与内容管理平台等实战项目,帮助学员快速掌握Yii框架的开发技巧与实战经验。

2025.09.04

3030

22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Yii Framework 2.0 API 官方文档
Yii Framework 2.0 API 官方文档

共0课时 | 0人学习

Yii2.0框架开发实战视频教程
Yii2.0框架开发实战视频教程

共22课时 | 9.3万人学习