appserver端的登陆是基于access-token的
参看代码:https://github.com/fecshop/yii2_fecshop/blob/master/services/Customer.php#L644
/** AppServer 部分使用的函数
* @param $email | String
* @param $password | String
* 无状态登录,通过email 和password进行登录
* 登录成功后,合并购物车,返回accessToken
* ** 该函数是未登录用户,通过参数进行登录需要执行的函数。
*/
protected function actionLoginAndGetAccessToken($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;
}
}