The problem with that approach is that imagine if Phoenix had a Phoenix.Security.sign_in function. How do you want to sign in?
With a cookie?
With a server-side session?
With a database session?
With an authentication token GET params?
With an authentication token in the header?
You make the choices for your specific use case and implement them using laser-focused, great packages. One system I built authenticates with an `authenticationToken` GET params, I look for that in a Plug, then assign the current_user to the conn object.
For non-api requests, I use plain old sessions.