Writing an Authentication Plug

The authentication process works in two stages. First, we’ll store the user ID in the session every time a new user registers or a user logs in. Second, we’ll check if there’s a new user in the session and store it in conn.assigns for every incoming request, so it can be accessed in our controllers and views. Let’s start with the second part because it’s a little easier to follow.

Create a file called web/controllers/auth.ex that looks like this:

 defmodule​ Rumbl.Auth ​do
 import​ Plug.Conn
 
 def​ init(opts) ​do
  Keyword.fetch!(opts, ​:repo​)
 end
 
 def​ call(conn, repo) ​do
  user_id = get_session(conn, ​:user_id​)
  user = user_id && repo.get(Rumbl.User, ...

Get Programming Phoenix now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.