Kapeusz
Hello, in my app I have been using Guardian for some time. However, I wanted to replace the current sign in with email and password to google auth. I have a problem setting this up. Right now, my code looks like:
First I added to config
Of course, all the config variables are filled in with, I think, correct information.
config :my_app, MyAppWeb.Auth.Guardian,
issuer: "my_app",
secret_key: System.get_env("SESSION_SECRET_KEY")
config :ueberauth, Ueberauth.Strategy.Google.OAuth,
client_id: System.get_env("CLIENT_ID"),
client_secret: System.get_env("CLIENT_SECRET"),
redirect_uri: System.get_env("REDIRECT")
router.ex
scope "/", MyAppWeb do
pipe_through [:browser, :auth]
get "/phoenix", PageController, :index
get "/", SessionController, :new
get "/:provider", SessionController, :request
get "/:provider/callback", SessionController, :callback
delete "/logout", SessionController, :delete
end
session_controller.ex
defmodule MyAppWeb.SessionController do
use MyAppWeb, :controller
plug Ueberauth
alias Ueberauth.Strategy.Helpers
alias MyApp.Repo.Users
alias MyApp.Repo.Schemas.User
alias MyAppWeb.Auth.Guardian
def new(conn, _params) do
case Guardian.Plug.current_resource(conn) do
nil ->
conn
|> put_root_layout({MyAppWeb.LayoutView, "login.html"})
|> render("new.html")
%User{} ->
redirect(conn, to: Routes.dashboard_path(conn, :index))
end
end
def request(conn, _params) do
render(conn, "request.html", callback_url: Helpers.callback_url(conn))
end
def callback(%{assigns: %{ueberauth_failure: _fails}} = conn, _params) do
conn
|> put_flash(:error, "Failed to authenticate.")
|> redirect(to: "/")
end
def callback(%{assigns: %{ueberauth_auth: auth}} = conn, _params) do
case Users.get_by_email(auth.info.email) do
{:ok, %User{} = user} ->
conn
|> Guardian.Plug.put_current_resource(user)
|> Guardian.Plug.sign_in(user, %{}, ttl: {2, :minute})
|> redirect(to: Routes.dashboard_path(conn, :index))
{:error, _} ->
conn
|> put_flash(:error, "Could not proceed, try again.")
|> redirect(to: Routes.page_path(conn, :index))
end
end
def delete(conn, _) do
conn
|> Guardian.Plug.sign_out()
|> put_flash(:info, "You have been logged out!")
|> redirect(to: "/")
end
end
new.html.eex
<div class="flex flex-col justify-center items-center h-screen">
<img src="/images/logo.svg" alt="MyApp" class="inline-block align-middle mb-4" />
<div class="bg-gray-100 rounded-lg p-8 w-full max-w-md">
<a class="button" href="<%= Routes.session_path(@conn, :request, "google") %>">
<i class="fa fa-google"></i>
Sign in with Google
</a>
</div>
</div>
request.html.eex
<h1>Log in with email / password</h1>
<p>
Enter the information to simulate the authentication.
</p>
<%= form_tag @callback_url, method: "post" do %>
<fieldset>
<legend>Authentication Information</legend>
<label for="email">Email</label>
<input type="email" name="email" id="email" required value="<%= @conn.params["email"] %>" />
<label for="password">Password</label>
<input type="password" name="password" id="password" required />
<label for="password_confirmation">Confirm Password</label>
<input type="password" name="password_confirmation" id="password_confirmation" required />
</fieldset>
<input class="button" type="submit" value="Login" />
<% end %>
I’m not sure what I’m missing. At this moment, when I click on Sign in with Google I’m redirected to request.html.eex template.
I’d appreciate any suggestion/idea/help on how to make it work.
Thank you!
##update
I was wondering so long and just noticted that I have to add:
/auth/ part to the route.
Trending in Questions
I’m working on a project that simulates the bumbl example in the programming phoenix book. It acts almost like an email client. We have a...
New
Hello,
I know there is an approach for handling lists that allows for optimized traversal, but I can’t recall the specific method (somet...
New
Hi everyone,
I am toying with the idea of building a “match maker” for giving personal help to people that wants to start coding.
I sta...
New
Documentation
While reading the Scoped Routes section, I noticed that the documentation currently refers to a problem without explainin...
New
So my question is quite simple and i have found no conclusive answer on forum, google or AI.
Should we use :erlang.float for Integer to ...
New
I recently noticed that Elixir’s Logger defaults its primary log level to :debug when no :logger, :level application configuration is pre...
New
I’m new to elixir and just tried to install the elixirLS extension for VScode(ium) and it is throwing some errors that I would like help ...
New
Other Trending Topics
Edit: 2026 May 15 - This post is archived.
Mob is alive!!
Main docs: mob v0.7.11 — Documentation
A bit of explanation for the slightly c...
New
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
I am happy to introduce the very α version of the new programming language compiled to BEAM.
Welcome Cure.
It has literally three kille...
New
Hi there! We created Gust: A task orchestrator inspired by Airflow.
For those who have never heard about Aiflow, it’s a Python-based wor...
New
Hi everyone!
The first release candidate for the Expert language server project is now available!
We’ve published a press release detai...
New
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #library
- #deployment
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #elixirconf
- #channels
- #exunit
- #discussion
- #code-sync
- #podcasts
- #javascript
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #ai
- #elixirconf-us
- #blog-post
- #elixir-ls
- #phoenix_html
- #iex
- #graphql
- #genstage
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #elixirconf-eu
- #metaprogramming
- #hex










Showing Posts 1 to 2- Show Best Posts
- Show All (oldest first)
- Show All (newest first)
APB9785
Here the request is sending to
request.html.heexinstead of your google OAuth app. Looks like a mock which only simulates making an OAuth request. For the real thing, you’ll want to let Ueberauth handle that request instead. There is a defaultrequest/2function which will be used if you remove yours - that should get you going.You only need to define
request/2manually if you have custom logic (such as saving state to the session). And in that case, it should callUeberauth.run_request/4instead ofrender/3Kapeusz
Thank you for the answer and the advice! I removed it and it still works!