流程:
(1)用户登录 》 存入数据库、将用户信息写入缓存 》将token返回给客户端
(2)当在小程序中向服务器中提交数据时,应判断是否用户本人提交
用户post数值(token包含在header中) 》 服务器获取token 》 token即为缓存的键值 》判断用户是否存在
具体代码:
public function createOrUpdateAddress()
{
$validate = new AddressNew();
$validate->goCheck();
/**
* 1、根据token获取userid
* 2、根据uid查找用户,判断用户是否存在
* 3、获取地址信息
* 4、判断create or update
*/
$uid = TokenService::getCurrentUid();
$dataArray = $validate->getDataByRule(input('post.'));
$user = UserModel::get($uid);
if (!$user){
throw new UserException();
}
$userAddress = $user->address;
if (!$userAddress){
$user->address()->save($dataArray);
}else{
$user->address->save($dataArray);
}
return json(new SuccessMessage(),201);
}
public static function getCurrentTokenVar($key)
{
$token = Request::instance()->header('token');
$vars = Cache::get($token);//token即为键值
if (!$vars){
throw new TokenException();
}else{
if (!is_array($vars)){ //如果用redis,则直接就是数组了。不需要进行json_decode
$vars = json_decode($vars,true);
}
//$vars 内容为 ['session_key','openid'=>'**','uid'=>1111,'expires_in'=>7200,'scope'=>16]
if (array_key_exists($key,$vars)){
return $vars[$key];
}else{
throw new Exception('尝试获取的Token变量不存在');
}
}
}
public static function getCurrentUid()
{
return self::getCurrentTokenVar('uid');
}