nuxt3获取接口传递过来的cookie信息,封装到utils/utils.js内容如下:
import {useCookie} from "#imports";
import _ from "lodash"
export default {
isLogin: function () {
let cookie = useCookie('userInfo')
return _.has(cookie.value, 'id');
},
getUserInfo: function () {
let cookies = useCookie('userInfo')
let userInfo = {}
if (_.has(cookies.value, 'id')) {
userInfo.id = cookies.value.id
userInfo.email = cookies.value.email
userInfo.firstName = cookies.value.firstName
userInfo.lastName = cookies.value.lastName
userInfo.image = cookies.value.image
userInfo.isAdmin = cookies.value.isAdmin
userInfo = cookies._rawValue
//userInfo = cookies._rawValue 也可以直接这样整个赋值,不用像上面一样一个一个赋值
}
return userInfo;
},
deleteUserInfo: function (){
let cookies = useCookie('userInfo')
cookies.value = null
}
}
接口基于symfony5开发,代码如下:
public function onAuthenticationSuccess(Request $request, TokenInterface $token): RedirectResponse|Response
{
/** @var User $user */
$user = $token->getUser();
$userInfo = [];
if ($user) {
$userInfo['id'] = $user->getId();
$userInfo['email'] = $user->getEmail();
$userInfo['firstName'] = $user->getFirstName();
$userInfo['lastName'] = $user->getLastName();
$userInfo['isAdmin'] = count($user->getRoles()) > 1 ? 1 : 0;
$userInfo['image'] = $user->getImage();
$userInfo['avatar'] = $user->getAvatar();
}
//注意expire 是个时间戳,这里设置过期时间
$response = $this->httpUtils->createRedirectResponse($request, $this->determineTargetUrl($request));
$cookie = new Cookie('userInfo', json_encode($userInfo), 1677812596, '/', null, null, false);
$response->headers->setCookie($cookie);
return $response;
}
设置了cookie过期时间的话,当cookie过期的时候 会自动删除,cookie自动删除主要有如下几种场景:
①会话 cooke (Session cookie) 在会话结束时(浏览器关闭)会被删除
②持久化 cookie(Persistent cookie)在到达失效日期时会被删除
③如果浏览器中的 cookie 数量达到限制,那么 cookie 会被删除以为新建的 cookie 创建空间。
