4

SPA の優れたソリューションである素晴らしい ActionCable gem を見つけました。

とアセットのみを送信したいのですが、他のすべての接続は を通じて実装さhtmlれます。文字列や整数を交換するのは難しくありませんが、ActionCable を介してログインするにはどうすればよいですか?cssjsActionCable

4

3 に答える 3

6

リードミーから

# 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 を配信するだけでなく、これがいくつかの指針になることを願っています。

于 2015-08-25T14:47:20.667 に答える
-8

解決策は、HTTP 認証トークンを使用することです。それは単純で、広く普及しており、明白です。この記事は私を大いに助けました

于 2015-09-02T16:44:05.203 に答える