Muhammad-Mullah
Redirect User According to user_role
Hey guys, working with phoenix 1.2 and i have a user model with user_role field which specifies if a user is an admin or sales or accounts. The Sign Up, Sign In and Sign Out flow works perfectly well but i wanted to implement a concept where a user is redirected to a specific dashboard after signing up and signing in i.e if a user is Admin then is redirected to Admin Dashboard and if is accounts is redirected to Accounts Dashboard. Am using Guardian for Authentication/Authorization
Anyone with an idea how i can implement this? Thanks in Advance
Most Liked
danielberkompas
I’m not familiar with Guardian, but this is how I would do it if I controlled the whole login flow.
Add a redirect_after_authentication function:
def redirect_after_authentication(conn) do
path =
case conn.assigns.current_user.user_role do
"admin" ->
admin_dashboard_path(conn, :index)
"accounts" ->
accounts_dashboard_path(conn, :index)
"sales" ->
accounts_dashboard_path(conn, :index)
end
redirect(conn, to: path)
end
You can put that function in a shared module, wherever it makes sense for your application. Then, in your SessionController, where you log in users, you’d do this:
# import `redirect_after_authentication/1` from wherever you put it
def create(conn, params) do
# Authentication logic, checking email/password etc
redirect_after_authentication(conn)
end
kokolegorille
Somewhere in your flow You should have
assign(socket, :user, user)
like just after
|> Guardian.Plug.sign_in(user)
and be sure to have a userole attribute in your schema.
kokolegorille
The error message is somehow clear…
nil.userrole/0
It does not find the user in
conn.assigns.user
Popular in Questions
Other popular topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #javascript
- #code-sync
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #advent-of-code
- #elixirconf-us
- #distillery
- #processes
- #forms
- #api
- #metaprogramming
- #security
- #performance








