xiaochuanworld
- xiaochuanworld 回复了 jackz 的回答
- 事实上按照你的流程,能够修改密码依赖于签名正确和有效期内,此时你是可以信赖adminuser这个用户名,但是需要在post操作时再次校验,(个人不推荐这种做法)
- 一般忘记密码这种流程,我都会在表中设计字段存储一个token带有效期,然后只认token,用户名也不用传了,传用户名基本没有意义。yii2 basic application 中的例子也是这么使用的。
希望对你有用。
很好的解决方法,谢谢你的建议
- xiaochuanworld 回复了 koko 的回答
$post['Admin']['adminuser']=$adminuser
$adminuser
有值没?$post['Admin']
这个数据存在不?@koko 这个是忘记密码后,邮箱验证里面的链接,这个页面直接改密码,由于安全原因,不能让游客POST回来账号名,不然可以通过修改这个POST 的包改到别的账号了,请问还有没有其他方法呢?
- xiaochuanworld 回复了 koko 的回答
$post['Admin']['adminuser']=$adminuser
$adminuser
有值没?$post['Admin']
这个数据存在不?精辟,理解到你说的了,如果要实现我的需求,有什么办法能将GET回来的值,追加到到POST上来的数据呢?全局变量这个方向可以吗?
- xiaochuanworld 回复了 xyf90314 的回答
createToken方法贴出来
Yii::$app->getUser()->getIdentity()这个我知道的,可是这个是忘记密码的界面,没有登录信息的,,我没有要在POST数据里面获取用户名,本来在表单里面没有设定这个,,我想吧浏览器地址栏获取到的$adminuser,追加进去$post的数据里面
- xiaochuanworld 回复了 xyf90314 的回答
createToken方法贴出来
Yii::$app->getUser()->getIdentity()这个我知道的,可是这个是忘记密码的界面,没有登录信息的,,我没有要在POST数据里面获取用户名,本来在表单里面没有设定这个,,我想吧浏览器地址栏获取到的$adminuser,追加进去$post的数据里面
- xiaochuanworld 回复了 Jeen 的回答
$adminuser= Yii::$app->request->get('adminuser'); //有值
$token= Yii::$app->request->get('token');
$mytoken=$model->createToken($adminuser,$timestamp); //so排除系统因素, 值在这个方法里面应该被修改了
。。。。
$post['Admin']['adminuser']=$adminuser; //值变成了 null看了下其它回答,首先不要怀疑 get和post的混用, 这个没有任何问题。
最开始拿到值了,后面变成null,所以你只需要找到 $adminuser 这个变量在哪个地方被篡改了 就可以解决问题了
如上所述,建议检查 createToken 方法,看看是不是引用传参 ..--------------补充分割线
反复沟通后,确认了问题在于: 提交找回密码的post请求中,没有附带相关的get参数。
在这边补充备注一下,希望对碰到同类问题的phper有帮助。
有兴趣的朋友推荐了解下 http协议中 get 与 post请求的差异
就不单独回复了$adminuser= Yii::$app->request->get('adminuser');//这个主要获取的是浏览器上的值,能够正确GET到的。
只是这个值传不去POST上来的数据里面,我想要追加post的数据,把GET到的$adminuser传过去 - xiaochuanworld 回复了 xyf90314 的回答
createToken方法贴出来
这个AJAX提交地址的URL不包含账号信息的,因为操作的账号名,不能让用户有可以能改得到的地方才行,如果用户看得懂JS,修改账号名称,就可能改掉别人的密码了
- xiaochuanworld 回复了 xyf90314 的回答
createToken方法贴出来
@Jeen 我是通过ajax提交的,现在通过‘return json_encode($post,JSON_UNESCAPED_UNICODE);’返回POST上去的数据,再在前端JAVASCRIPT里用console.log($post),打印出来的POST,所以视图文件并没有报错