最近fecro刚忙完,回头解决最近的问题
1.这个没有问题,因为accessToken
不是在返回的内容里面,而是在response header里面
\vendor\fancyecommerce\fecshop\app\appserver\modules\Customer\controllers\LoginController.php 79-81行左右
$accessToken = Yii::$service->customer->loginAndGetAccessToken($email,$password);
if($accessToken){
$code = Yii::$service->helper->appserver->status_success;
$data = [];
$responseData = Yii::$service->helper->appserver->getResponseData($code, $data);
return $responseData;
}
追踪一下函数:Yii::$service->customer->loginAndGetAccessToken($email,$password);
打开文件 @fecshop/services/Customer.php
/** AppServer 部分使用的函数
* @param $email | String
* @param $password | String
* 无状态登录,通过email 和password进行登录
* 登录成功后,合并购物车,返回accessToken
* ** 该函数是未登录用户,通过参数进行登录需要执行的函数。
*/
public function loginAndGetAccessToken($email, $password)
{
$header = Yii::$app->request->getHeaders();
if (isset($header['access-token']) && $header['access-token']) {
$accessToken = $header['access-token'];
}
// 如果request header中有access-token,则查看这个 access-token 是否有效
if ($accessToken) {
$identity = Yii::$app->user->loginByAccessToken($accessToken);
if ($identity !== null) {
$access_token_created_at = $identity->access_token_created_at;
$timeout = Yii::$service->session->timeout;
if ($access_token_created_at + $timeout > time()) {
return $accessToken;
}
}
}
// 如果上面access-token不存在
$data = [
'email' => $email,
'password' => $password,
];
if (Yii::$service->customer->login($data)) {
$identity = Yii::$app->user->identity;
$identity->generateAccessToken();
$identity->access_token_created_at = time();
$identity->save();
// 执行购物车合并等操作。
Yii::$service->cart->mergeCartAfterUserLogin();
$this->setHeaderAccessToken($identity->access_token);
return $identity->access_token;
}
}
继续追踪函数: $this->setHeaderAccessToken($identity->access_token);
public function setHeaderAccessToken($accessToken)
{
if ($accessToken) {
Yii::$app->response->getHeaders()->set('access-token', $accessToken);
return true;
}
}
可以看到, Yii::$app->response->getHeaders()->set('access-token', $accessToken);
您在返回值的response header
里面将 access-token
取出来就可以了