maxs

maxs

I’ve got a React SPA front end talking to a Phoenix JSON API. Authentication is done with Guardian, and we put a JWT in a Cookie which is then included in an Authorization header in any XHR requests.

The Guardian.Plug.VerifyHeader and Guardian.Plug.LoadResource plugs are used to load the current user.

I would like users who are system administrators to be able to impersonate any other user. I’m not really sure how to approach this however, both in the front and back end. Has anyone implemented something similar? Any general architectural suggestions?

Thanks

Showing Posts 1 to 3

minhajuddin

minhajuddin

I have done similar stuff in Rails. I used to have a ImpersonateController which would have an action called become. This would have a before_action authenticate_admin! which would make sure that only admin users would be able to access it. And in the become action I just switched the session[:user_id] with the user whom we want to impersonate. You could do the same in Phoenix.

maxs

maxs OP

I ended up with this code in my controller. Happy to share tests if someone is interested. Everything else I took care of on the front end, including stopping impersonation.

This controller action is behind an api pipeline that ensures the current_user is a sysadmin.

def impersonate(conn, params) do
    current_user = Guardian.Plug.current_resource(conn)
    impersonated_user = MyApp.Repo.get!(User, params["user_id"])

    # Keep sysadmin accounts private from each other
    with {:ok, impersonated_user} <- user_not_sysadmin(impersonated_user) do
      {:ok, token, _} = Guardian.encode_and_sign(impersonated_user, :api, imp: current_user.id)
      render(conn, "impersonate.json", %{token: token, impersonated_user: impersonated_user, current_user: current_user})
    end
end
karmajunkie

karmajunkie

I wouldn’t mind seeing what you’ve got if you don’t mind sharing… I’m about to implement a similar feature in the next few days.

— All posts loaded —

Where Next? Top

Trending in Questions Top

stjefim
Hello! Suppose you are building workflow (order / task / payment) processing system with the following requirements: Each workflow con...
New
water
I’m aware of 2 such projects, are there others? git: GitHub - team-alembic/realworld: A fullstack Phoenix LiveView application with back...
New
katta
I having some trouble figuring out if I have set myself too strict of standards for my production server. Currently I can handle 75% of r...
New
peck
Hi everyone. My team and I have been working on a fairly modest app based around video streaming and chat, but we’ve landed a customer t...
New
bradley
I really like the adapter patterns that ecto, nebulex, waffle, etc. use and would love find something similar for a key management servic...
New
unaware8150
Hello folks! So at work, we are seeing some situations where we have to define some “fixed” strings that are used across the codebase in...
New
Alvinkariuki
How Can I Optimise Compile Time Dependencies I have been building an elixir application for about 2 years now. Many modules and files ha...
New

Other Trending Topics Top

KristerV
Hey. Is there anyone here who creates agents in their apps? Not talking about using agents, but creating them. I’m finding it pretty diff...
New
mudasobwa
I fully migrated to my own harness from Anthropic/Gemini and I think it’s time to share it. Welcome DSH, the DeepSeek Harness, fully writ...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
juhalehtonen
There has been a thread to discuss the Stack Overflow Developer Survey on this forum every year since 2018, so here’s yet another one for...
New
budgie
I love Elixir. It’s one of 2 programming languages I’ve ever fallen in love with. But I don’t use it anymore. Serverless was the promis...
New
ausimian
Emily is an Elixir library that runs Nx computations on Apple’s MLX. Install it as the default Nx backend and Nx, defn, Axon, Nx.Serving,...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews