問題タブ [passport.socketio]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
399 参照

express - Express.io と Passport.socketio の両方の認証機能をグローバルに使用する方法

socket.io は、ミドルウェア機能を持たない単一のグローバル認証方法をサポートしています。Express.io と Passport.socketio の両方が、ロジックの注入ポイントとしてこの機能に依存しています。

express.io はエクスプレス セッションをリクエストに添付し、passport.socketio はインフレートされたユーザー オブジェクトを添付します。2 つの機能をエレガントに組み合わせるにはどうすればよいですか?

0 投票する
1 に答える
1107 参照

mongodb - Socket.io、Passport、MongoDB、passport.socketio が本番環境で壊れている

私はsocket.ioでリレーするnodejsアプリケーションを構築しました.Passportとpassport.socketioを認証と承認に使用し、mongodbとconnect-mongoをセッションストアに使用しました.

私のラップトップでは問題なく動作しますが、クラウド (Azure-VM) に移行すると、奇妙なエラーが発生し始めました。

2014 年 5 月 2 日、11:47:06.500 ポート 8081 でリッスン (https)

どこから始めればよいですか?

0 投票する
0 に答える
997 参照

node.js - Node.js socket.io ステータス行が CRLF で終わらない

socket.io が接続しようとするたびに、エラーが発生しました (chrome 33 / firefox 24):

「wss://playground-c9-doum.c9.io/socket.io/1/websocket/QBGO1ZlPhWUBkMVQ9cUP」への WebSocket 接続に失敗しました: WebSocket ハンドシェイク中のエラー: ステータス行が CRLF socket.io.js:2371 で終了しません

サーバー側:

クライアント側 :

Express、passport、passport-socket.io を使用しています...

ソケット構成 (io.set('authorization')) の 'auth' 部分を削除しようとしたため、passport-socket.io に問題があるとは思いませんが、同じ問題が発生します。

また、クライアント socket.connect(url) に特定の URL を指定しようとしましたが、どちらも機能しませんでした。

Socket.io が完全に失敗するわけではありません。websocket 接続が中断されているため、xhr ポーリングが開始されます (面倒です...)。

多くの調査を行いましたが、その問題について何も見つかりませんでした (github にも新しい問題を投稿しました)。

npm socket.io -v give 1.3.8 /socket.io/socket.io.js (クライアント) is Socket.IO.js build:0.9.16

0 投票する
2 に答える
2848 参照

deserialization - Passport.socketio のパスポート「ユーザーをセッション外でデシリアライズできませんでした」。しかし、私のメインアプリのパスポート(同じキーを使用)は問題なく逆シリアル化されます

ユーザーの認証に失敗しているときに、passport.socketio がこのエラーをスローします。

エラー: エラー: セッションからユーザーをデシリアライズできませんでした

問題を Passport.socketio に絞り込みました/lib/index.js

59行目

そのエラーがスローされます。デバッガーuserKeyは有効であることを通知し、ユーザーを逆シリアル化する必要があります。これは、メイン アプリのパスポートがユーザーを逆シリアル化するために使用するのと同じキーです。(mongoDB オブジェクトの ID です)。私のメインアプリのパスポートは、ユーザーの逆シリアル化に問題はありません。(詳細) なぜこれでもエラーがスローされるのかわかりません。

ここuserKeyで渡されるのは、メインのアプリで逆シリアル化に使用するのと同じキー パスポートです。

userKeyグローバルを作成してメインコードに入れるところまで行きました

その結果、無限ループが発生します (外側のpassport.deserialize内にあるため)が、iutは「ok」を出力するため、メインアプリのパスポートは、少なくともindex.jsのパスポートと同じものを使用して問題なくデシリアライズできます(passport.socketio\lib\ index.js) できません! .. 何らかの理由で。

次に、メインアプリからパスポートオブジェクト自体を渡そうとしました

実際にはエラーは発生しません!! socket.handshakeしかし、私はオブジェクトを取得しません。

これをさらに診断するアイデアがありません。何か助けていただければ幸いです。

が「セッションからユーザーを逆シリアル化」しないpassport.socketio原因は何ですか?passport

0 投票する
1 に答える
1207 参照

node.js - ユーザーがセッションへの追加を承認されている場合にソケット接続を開く方法は?

パスポートローカルを使用したユーザー認証時にソケット接続が開始されるエクスプレスサーバーをセットアップしようとしています。パスポートを構成するファイルの最終行に、「TypeError: オブジェクトは関数ではありません」というエラーが表示されます。

これは私のpassport.jsファイルです:

ここに私のserver.jsファイルがあります:

ログインを処理するroutes.jsの一部:

io.set('authorization' 関数をコメントアウトすると、ユーザーは認証されているように見えます。この関数は、パスポート認証関数を使用してソケット接続を確立できるようにするだけだと思っていました。ソケット接続を開始しようとしたときに認証しますか?

認証の仕組みを完全に理解しているとは思いません。ログイン フォームを送信すると、「dirname/login」に投稿が送信されます。これは、routes.js ファイルで処理されます。Passport.authenticate は、投稿が受信されたときに実行されるコールバックであり、データベースでプレーヤーを検索し、正しいユーザー名とパスワードが受信された場合、プレーヤー オブジェクトがシリアル化されてセッションに追加されます。socket.io の出番はどこですか? io.set('authorization' 関数は、ユーザーがいつ認証されるかを確認するリスナーを追加しますか?

コードの壁で申し訳ありません。私はノードが初めてで、プロセスを完全には理解していません。

0 投票する
0 に答える
161 参照

node.js - Express.io には、セッション データをリロードするためのプロパティ権限がありますか??

https://github.com/techpines/express.io/tree/master/examples/sessionsのようにソケットの概念を実装してきました。ページが初期化されると、保存されたセッション データを表示できます。それにもかかわらず、セッションデータが一定の間隔で変化し続けると、そのセッションデータが未定義として出力されます..

しかし、リンクhttp://www.danielbaulig.de/socket-ioexpress/を提供する socket.io 認証とハンドシェイク セッションを使用して、同様の概念をうまく実行できます。

クライアント側コード:

サーバー側コード:


コンソールでは、すべてのエミットで未定義として出力されます...元のユーザーセッションが変化し続けるため、ソケットセッションが更新されない理由を知りたいです... ???

セッションデータの変更を処理するために、サーバー側に追加の設定を行う必要がありますか???

0 投票する
1 に答える
1604 参照

javascript - Node.JS + Passport.SocketIO: `socket.handshake.user` プロパティの編集と保存

Node.JS (0.10.28)、Passport.JS (0.2.0) + Passport-Google (0.3.0)、および Passport.SocketIO (3.0.1) を使用しています。


現在、次を使用して、アプリのパスで Passport.JS によって作成されたユーザーにアクセスできますreq.user

Passport.SocketIO を使用して、次のユーザーにアクセスすることもできます。

スコープで使用するreq.userことにより、編集して「保存」することも可能です。更新はユーザー オブジェクトに表示されます。req._passport.session.user.property = new_property_valueapp.get/post/all(...)io.sockets.on(...)

私の質問は次のとおりです。更新されたユーザーがに変更を表示するように、スコープをsocket.handshake.user編集して「保存」することは可能ですか? 私は無駄に次のことを試しました:io.sockets.on(...)req.userapp.get/post/all(...)