Current section
Files
Jump to
Current section
Files
lib/login/session.ex
defmodule Entrance.Login.Session do
use Entrance.Login
@session_key :user_id
@session_secret :session_secret
@doc """
Logs in given user by setting `:user_id` on the session of passed in `conn`. The user struct must have an `:session_secret` field.
```
import Entrance.Login.Session
# ... your controller
user = Repo.get(User, 1)
conn
|> login(user)
|> put_flash(:notice, "Successfully logged in")
|> redirect(to: "/")
```
"""
def login(conn, user) do
conn
|> Plug.Conn.put_session(@session_key, user.id)
|> Plug.Conn.put_session(@session_secret, user.session_secret)
end
@doc """
Logs out current user.
```
import Entrance.Login.Session
# ... your controller
conn
|> logout
|> put_flash(:notice, "Successfully logged out")
|> redirect(to: "/")
```
"""
def logout(conn) do
conn
|> Plug.Conn.delete_session(@session_key)
|> Plug.Conn.delete_session(@session_secret)
end
@doc """
Returns the current user or nil based on `:user_id` in the session.
```
import Entrance.Login.Session
# ... your controller
login(conn, Repo.get(User, 1))
user = get_current_user(conn)
```
"""
def get_current_user(conn) do
id = Plug.Conn.get_session(conn, @session_key)
if !is_nil(id) do
secret = Plug.Conn.get_session(conn, @session_secret)
repo = Application.get_env(:entrance, :repo)
user_module = Application.get_env(:entrance, :user_module)
repo.get_by(user_module, id: id, session_secret: secret)
end
end
end