我有一个使用django频道和Vue作为前端构建的SPA。
用户首次加载网页时,使用
提供index.htmlurl(r'^.*$', TemplateView.as_view(template_name='index.html'), name="app")
然后前端使用Web套接字与服务器通信。
发送的消息之一可能是使用适当的凭据登录到系统。
我一直按照https://channels.readthedocs.io/en/latest/topics/authentication.html上的说明进行操作,以通过使用者登录。
class MyConsumer(AsyncJsonWebsocketConsumer):
async def connect(self):
self.group_name = str(uuid.uuid1())
print(self.scope['session'].session_key)
self.user = self.scope["user"]
# Join room group
await self.channel_layer.group_add(
self.group_name,
self.channel_name
)
await self.accept()
# User data
await self.send(simplejson.dumps(dict(data=dict(socketid=self.group_name, user=dict(username=self.user.username or None)))))
async def receive_json(self, jsdata):
kwargs = jsdata.get('kwargs', {})
# Manage Login
if is_login_message(jsdata): # This checks if the message is sent to do login
user = authenticate(**kwargs)
await login(self.scope, user)
print('Saving login session')
await database_sync_to_async(self.scope["session"].save)()
await self.send(simplejson.dumps(dict(data=dict(user=dict(username=user.username)))))
print(self.scope['session'].session_key)
return
一切正常。当用户登录时,我可以看到该热键已被打印。但是,当我重新加载网页时,该会话未保留。它在 connect 方法中显示“无”。我看到登录完成后未设置cookie。我希望运行以下行以在浏览器中设置一些cookie时,从服务器发送到客户端的信息。
await database_sync_to_async(self.scope["session"].save)()
await self.send(simplejson.dumps(dict(data=dict(user=dict(username=user.username)))))
但是这没有发生。可能是什么问题?