浏览器没有保存cookie-session
来源:13-4 sentry 集成到django rest framework中-2
天才在左_我在右
2021-06-09
环境:
Django==2.2.19,uwsgi,Nginx,vue,Goole 90.x centos7, 内网
问题描述:
本地运行时和vue联调,登录可以,访问个人中心也可以,所有接口访问都是ok的,后端能获取到用户的登录信息。
当我把程序并部署到服务器上时,可以登录,但是所有接口都无法访问,因为后端获取不到 用户的登录信息,所有请求都被跳转到登录页面;
相关代码
:验证登录代码
def login_required_json(view_func):
"""
判断用户是否登录的装饰器,并返回json
:param view_func: 被装饰的视图函数
:return: json、view_func
"""
@wraps(view_func)
def wrapper(request, *args, **kwargs):
# 如果用户未登录,返回json数据
if request.user.is_authenticated is False:
logger.error(
f"这个接口被请求时:{request.path},查到没有登录状态: {usip(request)}----{request.COOKIES.get('sessionid', None)}")
return JsonResponse({'code': "504", 'msg': '用户未登录'})
else:
# 如果用户登录,进入到view_func中
return view_func(request, *args, **kwargs)
return wrapper
class LoginRequiredMixin(object):
"""验证用户是否登陆并返回json的扩展类"""
@classmethod
def as_view(cls, **initkwargs):
view = super().as_view(**initkwargs)
return login_required_json(view)
# pass
settings-session-cookie的设置:
# SESSION_COOKIE_SECURE = True
SESSION_COOKIE_SAMESITE = None
SESSION_COOKIE_HTTPONLY = None # 是否HttpOnly在会话 cookie 上使用标志 如果设置为 True,客户端 JavaScript 将无法访问会话 cookie。
# SESSION_COOKIE_DOMAIN = "zhiliao.com"
SESSION_ENGINE = "django.contrib.sessions.backends.cache" # 用于会话 cookie 的域
# SESSION_CACHE_ALIAS = "session"
SESSION_COOKIE_AGE = 60 * 60 # 以秒为单位
SESSION_SAVE_EVERY_REQUEST = False # 是否每次请求都保存Session,默认修改之后才保存(默认)
SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否关闭浏览器使得Session过期(默认)
Nginx 代理 部分配置:
server {
listen 80;
server_name api.cicada.com;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8101;
}
}
server {
listen 80;
server_name admin.cicada.com;
location / {
root /home/cicada/admin;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
这是部署在服务器的 cookie中没有保存sessionid
这个是个本地运行的;cookie中就有sessionid
求解
导致这种问题的原因是不是跨域?如果是怎么优化?
导致这种问题的原因是不是Nginx代理问题,前端url 与后端 url 不同导致的?如果是 有没有具体的配置方案或者代码demo?
案例
https://blog.csdn.net/weixin_42681866/article/details/104786293
这个博客案例与我的很相似,但是解决不了。
写回答
1回答
-
课程是前后端分离的,保存token到cookie中是由前端自己写入的,所以你需要通过f12看看运行的时候是否登陆的接口返回了token,如果返回了没有写入到cookie中那么你需要看看console中是否有报错
042021-06-15
Python前后端分离开发Vue+Django REST framework实战
Django REST framework课程视频,RESTFul API前后端分离开发
2872 学习 · 2457 问题
相似问题