<turbo-stream action="append" target="posts_list"><template>    <div class="postbit" id="95168" data-post-id="95168">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="danschultzer" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/danschultzer/120/4942_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  danschultzer
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Pow Core Team</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Thanks! I’ve updated <a href="https://github.com/danschultzer/pow_assent#getting-started" rel="noopener nofollow ugc">the readme with the instructions</a> you need to get it working. PowAssent expects that you have already installed Pow. I hope you can get it up and running now <img src="https://forum.elixirforum.com/images/emoji/apple/smile.png?v=15" title=":smile:" class="emoji" alt=":smile:" loading="lazy" width="20" height="20"></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="95168" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/pow-robust-modular-extendable-user-authentication-and-management-system/15807/22">Post #21</a>
	                </div>
	            </div>
              <div id="likers-container-95168" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="95168"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #21"></div>
  </section>
</div>
    <div class="postbit" id="95169" data-post-id="95169">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="leifericf" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/leifericf/120/39367_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  leifericf
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="danschultzer" data-post="22" data-topic="15807">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/danschultzer/48/4942_2.png" class="avatar"> danschultzer:</div>
<blockquote>
<p>PowAssent expects that you have already installed Pow.</p>
</blockquote>
</aside>
<p>Thanks! I realised after reading your response to my GitHub issue. I fiddled around a bit more after that and managed to put my app in an invalid state somehow by messing up the database migrations (I was playing around with some other stuff as well). Will continue tomorrow with a fresh app <img src="https://forum.elixirforum.com/images/emoji/apple/smiley.png?v=15" title=":smiley:" class="emoji" alt=":smiley:" loading="lazy" width="20" height="20"></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="95169" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/pow-robust-modular-extendable-user-authentication-and-management-system/15807/23">Post #22</a>
	                </div>
	            </div>
              <div id="likers-container-95169" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="95169"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #22"></div>
  </section>
</div>
    <div class="postbit" id="98680" data-post-id="98680">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="rccursach" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/rccursach/120/13084_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  rccursach
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Hi, I looked through the code in the repo and the differences with the other libs available for authentication, this one fits my needs because im also planning to use your oauth provider one, so it makes sense to use it instead of rolling my own Auth code.</p>
<p>But after following the guides, I can’t get it working. everything is installed ok and compiles, I can fire up the server, but protected routes, or even registration/new gives me this message:</p>
<pre><code>function XXXX.Pow.Phoenix.SessionController.init/1 is undefined (module XXXX.Pow.Phoenix.SessionController is not available)

nofile:  XXXX.Pow.Phoenix.SessionController.init/1
</code></pre>
<p>my router has “use Pow.Phoenix.Router”, a call to “pow_routes()” and the “protected” pipeline added.</p>
<p>Given that error, maybe am I missing something obvious?</p>
<pre><code>(phoenix 1.3.4, Elixir 1.7.0 (compiled with Erlang/OTP 21) )
</code></pre>
<p>Awesome work BTW!</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="98680" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/pow-robust-modular-extendable-user-authentication-and-management-system/15807/24">Post #23</a>
	                </div>
	            </div>
              <div id="likers-container-98680" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="98680"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #23"></div>
  </section>
</div>
    <div class="postbit" id="98681" data-post-id="98681">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="danschultzer" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/danschultzer/120/4942_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  danschultzer
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Pow Core Team</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>This will solve your issue: <a href="https://github.com/danschultzer/pow/issues/22#issuecomment-419888535" class="inline-onebox" rel="noopener nofollow ugc">Pow.Phoenix.RegistrationController not available? · Issue #22 · pow-auth/pow · GitHub</a></p>
<blockquote>
<p>You probably have the routes set up like this:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">  scope "/", Powweb do
    pipe_through :browser

    pow_routes()
  end
</code></pre>
<p>You should remove the <code>Powweb</code> namespace so it looks like this:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">  scope "/" do
    pipe_through :browser

    pow_routes()
  end
</code></pre>
</blockquote> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="98681" data-batch-url="/posts/batch_likers">
                        5
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/pow-robust-modular-extendable-user-authentication-and-management-system/15807/25">Post #24</a>
	                </div>
	            </div>
              <div id="likers-container-98681" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="98681"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #24"></div>
  </section>
</div>
    <div class="postbit" id="98685" data-post-id="98685">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="rccursach" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/rccursach/120/13084_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  rccursach
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Yup, that certainly was what I did. My brain read it lightly and I was thinking one scope was protected, and the other not. So it made sense to me to put pow_routes() and also my root path “/” in the open one, and then I obviously added my app namespace.<br>
I was about to copy the lib’s controllers into my app.</p>
<p>Thanks!</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="98685" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/pow-robust-modular-extendable-user-authentication-and-management-system/15807/26">Post #25</a>
	                </div>
	            </div>
              <div id="likers-container-98685" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="98685"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #25"></div>
  </section>
</div>
    <div class="postbit" id="98694" data-post-id="98694">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="jdumont" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/jdumont/120/2353_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  jdumont
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I’ve always rolled my own user system when building out my Elixir apps, but knew that it’s a lot of wasted effort and repeated work. I’ve looked at some of the available libraries but never felt like I would benefit from using them. I worried that setup wouldn’t be much faster/easier than building my own, and that I’d be limited in future when I want to extend or change it. (I’ve been badly burnt previously with “standard” user systems that were difficult to extend)</p>
<p>From reading this thread, and having a look through your README I think you’ve nailed it! Your on boarding is incredibly clear, and I look forward to using Pow on my next app! Thanks for your hard work!</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="98694" data-batch-url="/posts/batch_likers">
                        8
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/pow-robust-modular-extendable-user-authentication-and-management-system/15807/27">Post #26</a>
	                </div>
	            </div>
              <div id="likers-container-98694" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="98694"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #26"></div>
  </section>
</div>
    <div class="postbit" id="99609" data-post-id="99609">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="dimitarvp" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/dimitarvp/120/38664_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  dimitarvp
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Apologies if the question is naive – I looked through your README but couldn’t find the answer.</p>
<p>Does Pow support either (or both) of the scenarios when users cannot sign up by themselves?</p>
<ul>
<li>They have to be explicitly invited by an admin and can only sign up with a link mailed to them (which expires after, say, 24h).</li>
<li>They can visit a sign up page but after the process completes they receive notification that their registration must be manually approved by an admin.</li>
</ul>
<p>I am looking for features that allow a startup to roll out accounts gradually and not just open the floodgates from the first alpha version. So on that lane of thought, can Pow offer anything related to this desired behaviour?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="99609" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/pow-robust-modular-extendable-user-authentication-and-management-system/15807/28">Post #27</a>
	                </div>
	            </div>
              <div id="likers-container-99609" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="99609"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #27"></div>
  </section>
</div>
    <div class="postbit" id="99671" data-post-id="99671">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="danschultzer" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/danschultzer/120/4942_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  danschultzer
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Pow Core Team</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Pow doesn’t offer this out of the box, but it would be trivial to build.</p>
<p>For admin invite, I would set up a custom registration controller that calls the actions in <code>Pow.Phoenix.RegistrationController</code>. The controller will have a plug action that verifies that the invite token is valid. The token is invalidated upon successful registration. As an extension, it would look pretty similar to the <a href="https://github.com/danschultzer/pow/tree/master/lib/extensions/reset_password" rel="noopener nofollow ugc">PowResetPassword</a> extension.</p>
<p>For admin approval, I would use a <a href="https://github.com/danschultzer/pow#phoenix-controllers" rel="noopener nofollow ugc">controller callback</a> for the Pow registration and session controller. It’ll just halt the connection if the user hasn’t been approved, and redirect users to the sign in page with a flash message. It’ll be very similar to the existing <a href="https://github.com/danschultzer/pow/tree/master/lib/extensions/email_confirmation" rel="noopener nofollow ugc">PowEmailConfirmation</a> extension.</p>
<p>Both of these would be easy to set up as Pow extensions too.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="99671" data-batch-url="/posts/batch_likers">
                        4
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/pow-robust-modular-extendable-user-authentication-and-management-system/15807/29">Post #28</a>
	                </div>
	            </div>
              <div id="likers-container-99671" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="99671"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #28"></div>
  </section>
</div>
    <div class="postbit" id="99672" data-post-id="99672">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="danschultzer" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/danschultzer/120/4942_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  danschultzer
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Pow Core Team</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Thanks! Being badly burnt from the limitations of existing solutions was exactly my motivation to create Pow <img src="https://forum.elixirforum.com/images/emoji/apple/slight_smile.png?v=15" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="99672" data-batch-url="/posts/batch_likers">
                        6
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/pow-robust-modular-extendable-user-authentication-and-management-system/15807/30">Post #29</a>
	                </div>
	            </div>
              <div id="likers-container-99672" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="99672"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #29"></div>
  </section>
</div>
    <div class="postbit" id="99699" data-post-id="99699">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="tangui" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/tangui/120/12091_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  tangui
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>My understanding is that the difference is that KeyCloak and identity-server (and CAS) are standalone authentication servers, whereas Pow is embedded / in-elixir-app authentication system.</p>
<p>With standalone servers:</p>
<ol>
<li>Your app detects the user is unauthenticated (and it is required he’s)</li>
<li>Your app redirects (HTTP redirect) to the authentication server (which can be located on the same service or on a totally different hostname)</li>
<li>The authentication server authenticates the user (e.g. password + push notification, Facebook…)</li>
<li>The authentication redirects back (HTTP redirect) to your app, with a proof of authentication (that may have additional user data: first name, email…) - typically a SAML assertion or an OpenID Connect id_token</li>
<li>Your app checks the proof of authentication (checking the digital signature), and once verified throws it away and opens a cookie session</li>
</ol>
<p>With Pow on the other side, as far as I understand, everything is done inside the Elixir app and there’s no redirections.</p>
<p>I guess both approaches have pros and cons, depends on your use-case (better UI with Pow, since there are no redirects - SSO on multiple domains with authentication servers since works it independently of hostnames (that are attached to cookies))</p>
<p>Promising lib btw <img src="https://forum.elixirforum.com/images/emoji/apple/slight_smile.png?v=15" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="99699" data-batch-url="/posts/batch_likers">
                        5
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/pow-robust-modular-extendable-user-authentication-and-management-system/15807/31">Post #30</a>
	                </div>
	            </div>
              <div id="likers-container-99699" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="99699"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #30"></div>
  </section>
</div>
</template></turbo-stream><turbo-stream action="replace" target="load-more-container"><template><div id="load-more-container" class="load-more-container">
    <a class="load-more-button" data-turbo-stream="true" href="/topics/15807/load_more?page=4">Load more posts (211 remaining)</a>
</div></template></turbo-stream>