SPA の優れたソリューションである素晴らしい ActionCable gem を見つけました。
とアセットのみを送信したいのですが、他のすべての接続は を通じて実装さhtml
れます。文字列や整数を交換するのは難しくありませんが、ActionCable を介してログインするにはどうすればよいですか?css
js
ActionCable
SPA の優れたソリューションである素晴らしい ActionCable gem を見つけました。
とアセットのみを送信したいのですが、他のすべての接続は を通じて実装さhtml
れます。文字列や整数を交換するのは難しくありませんが、ActionCable を介してログインするにはどうすればよいですか?css
js
ActionCable
リードミーから
# app/channels/application_cable/connection.rb
module ApplicationCable
class Connection < ActionCable::Connection::Base
identified_by :current_user
def connect
self.current_user = find_verified_user
end
protected
def find_verified_user
if current_user = User.find(cookies.signed[:user_id])
current_user
else
reject_unauthorized_connection
end
end
end
end
find_verified_user
したがって、ここに独自のロジックを挿入できるようです。reject_unauthorized_connection
メソッドは参照lib/action_cable/connection/authorization.rb
用に存在します。
ヘロクから:
[認証] は、WebSocket が認証に一般的に使用される標準の HTTP ヘッダーを通過するため、さまざまな方法で実行できます。これは、WebSocket 接続の Web ビューに使用しているのと同じ認証メカニズムを使用できることを意味します。
JavaScript から WebSocket ヘッダーをカスタマイズすることはできないため、ブラウザーから送信される「暗黙の」認証 (つまり、Basic または Cookie) に限定されます。さらに、WebSocket を処理するサーバーを、「通常の」HTTP 要求を処理するサーバーとは完全に分離するのが一般的です。これにより、認証ヘッダーの共有が困難または不可能になる可能性があります。
これを念頭に置いて、通常の Web ログイン フローを使用して認証 Cookie を設定し、認証ステップの後に SPA を配信するだけでなく、これがいくつかの指針になることを願っています。
解決策は、HTTP 認証トークンを使用することです。それは単純で、広く普及しており、明白です。この記事は私を大いに助けました