:id
キーにアクセスしようとしたため、以下のエラーが表示されていました。ここで驚きはありません。しかし、私の実際の質問は、ユーザーが:session
キーの中に置かれている理由です。このプラグは特定ですか?私は以下のようにユーザをキー:session
に設定することを覚えていません。プラグ接続またはセッションのKeyError
エラー:エラーの原因となった
** (KeyError) key :id not found in:
%{
session: %ExampleApp.User{
__meta__: #Ecto.Schema.Metadata<:loaded, "users">,
email: "[email protected]",
first_name: "keith",
id: 356,
inserted_at: #Ecto.DateTime<2016-08-25 00:56:51>,
last_name: "a.",
updated_at: #Ecto.DateTime<2016-08-25 00:56:51>,
username: "keith"
},
view_module: ExampleApp.SessionView,
view_template: "show.json"
}
ビュー:
defmodule ExampleApp.SessionView do
use ExampleApp.Web, :view
def render("show.json", %{jwt: jwt, user: user, exp: exp}) do
%{
jwt: jwt,
exp: exp,
user: render_one(user, __MODULE__, "show.json")
}
end
def render("show.json", user) do
%{
id: user.id, #<------------------------------------------ HERE
username: user.username,
last_name: user.last_name,
first_name: user.first_name
}
end
私は、ユーザーの情報にアクセスするには、次の操作を行う必要がありました:それは場合に役立ちます
...
def render("show.json", user) do
%{
id: user.session.id, #<------------------------------------------ HERE
username: user.session.username,
last_name: user.session.last_name,
first_name: user.session.first_name
}
end
はここで、コントローラの:
defmodule ExampleApp.RegistrationController do
use ExampleApp.Web, :controller
alias ExampleApp.{Repo, User, SessionView}
def create(conn, %{"user" => user_params}) do
changeset = User.new_changeset(%User{}, user_params)
case Repo.insert(changeset) do
{:ok, user} ->
{:ok, jwt, claims} = user |> Guardian.encode_and_sign(:token)
exp = Map.get(claims, "exp")
conn
|> put_status(:created)
|> render(SessionView, "show.json", %{jwt: jwt, user: user, exp: exp})
{:error, changeset} ->
conn
|> put_status(:unprocessable_entity)
|> render("error.json", changeset: changeset)
end
end
end
私はここで間違っていますか?ご協力いただきありがとうございます。
ありがとうございました@Dogbert速い返信です!私は完全にドキュメントのそのセクションをスキミングしました。愚かな私。 –