fastadmin对token的操作
最近开发遇到一个场景,需要绕过验证获取登录,所以恶补了一下这个知识点,这个主要就是控制fastadmin的token的问题
代码分步实现
class Xcxuser extends Api
{//关于鉴权protected $noNeedLogin = ['login','getopenid','test1'];//不需要登录protected $noNeedRight=['ceshi','test2','test3'];//需要登陆,不需要健权//不需要登录的操作接口public function test1(){return '不登陆就可以显示的操作';}//需要登录的操作接口public function test2(){return '登陆成功后的操作';}//打印账户信息的接口public function test3(){$this->success('登陆成功',['action'=> $this->auth->getUserinfo()]);}//登陆测试方法,测试出tokenpublic function login(){$password = 1234243563242424242;$username = 1234243563242424242;$search_res = model('user')->whereOr('username',$username)->whereOr('openid',$password)->find();if ($search_res){$loginRes = $this->auth->direct($search_res['id']);//direct:直接登录账号$token = $this->auth->getToken();Cookie::set('uid',$this->auth->id);Cookie::set('token',$token);$this->success('登陆成功',["token"=>$token]);}}
}
这里首先测试test1,test2,test3
test1是属于不需要登录,test2属于需要登陆
test1
test2
test3
现在test2与test3是无法打印的状态
然后就运行login方法模拟登录,这里的登录数据需要数据库中的真实数据
这里看下login的源码,看下发生了什么
//登陆测试方法,测试出tokenpublic function login(){$password = 1234243563242424242;$username = 1234243563242424242;$search_res = model('user')->whereOr('username',$username)->whereOr('openid',$password)->find();if ($search_res){$loginRes = $this->auth->direct($search_res['id']);//direct:直接登录账号$token = $this->auth->getToken();Cookie::set('uid',$this->auth->id);Cookie::set('token',$token);$this->success('登陆成功',["token"=>$token]);}}
然后使用
这里首先是通过password和openid模拟了登录,这里有一个有意思的方法
direct()
看下是什么方法
是一个直接登录账号方法,只需要传入id
然后在登录方法结束后会打印token
然后将token作为请求头发送给test2和test3看看会发生什么
test2成功打印
test3打印完成后打印出了用户的全部信息
这里附上原作者的视频教学文件
https://www.bilibili.com/video/BV1Ji4y1V7ZV