我有一个带有devise_token_auth gem身份验证的Rails 5 API。
现在我想为经过身份验证的用户进行个人聊天。我没有资产,因为我正在使用API和前端是在本机应用程序中,我想要本机应用程序消息传递。
那么,我如何使用devise_token_auth gem对用户进行身份验证,以使用action cable进行个人消息传递呢
我有一个带有devise_token_auth gem身份验证的Rails 5 API。
现在我想为经过身份验证的用户进行个人聊天。我没有资产,因为我正在使用API和前端是在本机应用程序中,我想要本机应用程序消息传递。
那么,我如何使用devise_token_auth gem对用户进行身份验证,以使用action cable进行个人消息传递呢
3条答案
按热度按时间nvbavucw1#
No cookies are generally supported in Rails 5 API. See: http://guides.rubyonrails.org/api_app.html#creating-a-new-application .
如果您首先在站点的某个地方进行普通HTTP身份验证(使用devise_token_auth gem),那么您会得到3个auth头-
access_token
、client
、uid
。In such case you can use the Basic authentification for your Websockets connection (according https://devcenter.heroku.com/articles/websocket-security#authentication-authorization ) using these 3 auth headers:
调用(我使用Chrome Simple WebSocket Client):
然后处理:
这类似于常见的Websockets身份验证https://rubytutorial.io/actioncable-devise-authentication/
这样的身份验证可能已经足够了。我相信没有必要额外对频道订阅和发送到服务器的每个Websocket消息进行身份验证:
http://guides.rubyonrails.org/action_cable_overview.html#server-side-components-connections
对于服务器接受的每个WebSocket,都会示例化一个连接对象。该对象 * 成为从该对象创建的所有频道订阅的父对象 *。连接本身不处理除验证和授权之外的任何特定应用程序逻辑。
因此,如果您的连接是
identified_by :current_user
,您以后可以访问FooChannel < ApplicationCable::Channel
中的任何位置!示例:PS如果你想在Rails 5 API中使用cookie,你可以打开它:
http://guides.rubyonrails.org/api_app.html#other-middleware
http://guides.rubyonrails.org/api_app.html#adding-other-modules
zwghvu4y2#
这里,ng-token-auth在cookie中设置的
auth_headers
用于确定请求是否经过身份验证,如果没有,则拒绝连接。b1uwtaje3#
我是这样做的,因为我们的React Native应用在头中发送身份验证: