問題タブ [ueberauth]

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 に答える
29 参照

elixir - Elixir Phoenix 1.6 - ブラウザにトークンを渡そうとしていますが、関数 nil.id/0 は未定義または非公開です

私は Phoenix 1.6 アプリに取り組んでいます。動作していたGitHub経由の認証にUeberauthを使用しました。認証されたユーザーができる、トピックとコメントを投稿するためのチャネルをセットアップしました。次に、チャネルで使用するユーザー トークンを追加してみました。mix phx.new.socket Userを使用して作成された定型コードの指示に従っていました。user_socket.jsファイルには、テンプレートでトークンを作成するための指示があり、機能しました。トークンは、connect関数のuser_socket.exで検証されます。トークンをconnに追加するために、router.exに新しいプラグput_user_tokenを作成しました。、これも機能しました。しかし、プラグ内のロジックに問題がありました。これは私のコードです:

これは、ログインしている限り機能します。問題は、ログアウトして再度ログインしようとしたときです。プラグ内の if ステートメントのボイラープレート コードは次のとおりです。

現在のユーザーがuserとして定義されており、値がデータベース内のユーザー レコードの ID と等しいため、私のコードは異なります。問題は、Ueberauth をセットアップするときに、 put_user_tokenプラグの前に別のプラグSetUserを作成したことだと思います。これは SetUser の呼び出し関数です。

ログアウトした後、アプリがホームページにリダイレクトされ、プラグが実行され、 conn.assigns.userの値がnilに設定されているようです。その後、エラーが発生し、再度ログインできません。

put_user_tokenプラグのifステートメントでnil値を処理できるようにする方法を考える必要があります。is_integer(conn.assigns.user)と他のいくつかの比較を試しましたが、 nilの値が存在する場合、アプリはクラッシュします。