6

Rails アプリと node.js アプリがあり、Devise を使用してユーザーを認証しています。セッションを Redis で保存します。ユーザーがノードアプリにアクセスすると、ユーザーがログインしているかどうかをアプリがsocket.ioを介してチェックするようになりました。redis からセッション データを取得できましたが、それらを解釈してユーザーがログインしているかどうかを確認する方法がわかりません。

_session_id がデータベースに存在するかどうかを確認し、セッション データを取得するノード アプリのコードを次に示します。

io.set('authorization', function (data, accept) {
    if (data.headers.cookie) {
        data.cookie = cookie.parse(data.headers.cookie);
        data.sessionID = data.cookie['_session_id'];
        redis.get(data.sessionID, function (err, session) {
            if (err || !session) {
                accept('Error', false);
            } else {
                data.session = session;
                console.log(session);
                accept(null, true);
            }
        });
    } else {
       return accept('No cookie transmitted.', false);
    }
});

これは console.log(session) が私に与えるものです:

{I"_csrf_token:EFI"1HPglfkCCagvb1LLraU1CEEyx7AtDzztqAEPY5G5lNgY=;FI"warden.user.user.key;TI"    User;F[iI""$2a$10$IHq2WAhwbaqR4WWajRE/Yu;T

ユーザーが node アプリを使用して Rails アプリにログインしているかどうかを確認するにはどうすればよいですか? ありがとう

編集:私が使用するredisストアgemは、セッションをデータベースに保存する前にマーシャリングメソッドを呼び出すようです。そのため、マーシャリング メソッドをオーバーライドすることで問題を回避し、セッション データを JSON 形式で保存しました。あまりエレガントではないので、rails と node.js の間でセッションを共有するためのより良い方法を見つけたら、お知らせください。

4

2 に答える 2

1

Express なしで使用するには、Rails-Cookie-Parser for Express https://github.com/instore/rails-cookie-parserライブラリの index.js メソッドを少し調整するだけで簡単に実行できます。

このライブラリは、依存関係として Marshal npm を使用します

注: 元の Cookie は URL エンコードされているため、decodeURIComponent("cookie value") が必要になる場合があります。

于 2016-02-26T06:22:20.663 に答える
1

独自の oauth api を作成する方が簡単かもしれません (この oauth を行う方法については railscast があります)。私の知る限り、devise は ruby​​ gem であり、実際にはクロスプラットフォームではありませんが、oauth はほぼすべての言語で使用できます。oauth トークンを追加して、そのトークンを node.js に渡すことができるようにすることができます。

于 2013-06-11T04:30:10.373 に答える