Error: Getting this error message when the user tries to log in using OAuth2.
[debug] Processing with MyAppWeb.UserController.update/2
Parameters: %{"id" => "undefined", "user" => %{"bio" => "bio", "email" => "email@gmail.com", "github_token" => "XXX", "github_uid" => "XXX", "image_url" => "https://avatars3.githubusercontent.com", "name" => "Name", "password" => "[FILTERED]", "username" => "username"}}
Pipelines: [:api]
[info] Sent 400 in 14ms
[debug] ** (Ecto.Query.CastError) deps/ecto/lib/ecto/repo/queryable.ex:348: value `"undefined"` in `where` cannot be cast to type :id in query:
from u in MyApp.Accounts.User,
where: u.id == ^"undefined",
select: u
This is the UserController.ex
def update(conn, %{"id" => id, "user" => user_params}) do
user = Accounts.get_user!(id)
with {:ok, %User{} = user} <- Accounts.update_user(user, user_params) do
render(conn, "show.json", user: user)
end
end
The issue, so far I can think of, is when the user logs in using third party app, the account is not created in the database first, instead it is directed to the update profile page in the front-end which is in React. Then when the user submits the update profile form, id is undefined and is not able to get_user!(id)
.
-
Do I modify
update()
? Adding case statement?undefined -> create() id -> update()
But in this case,
"undefined"
seems different fromnil
, but I don’t know how. -
Do I modify
get_user()
? Without!
. -
Do I create
check_user_id()
? -
Do I change the flow of the OAuth2 Authentication; create the user before redirecting to update profile page?
-
Do I make changes from front-end before passing the parameters?
-
What are some decent standard options?