  
<div id="snippet_168" class="snippet">
  <h2><a href="/snippets/168-How-to-add-OpenID-support-to-your-Rails-application-with-the-open-id-authentication-plugin" title="How to add OpenID support to your Rails application with the open_id_authentication plugin - Ruby - openid, authentication, rails, ruby, plugin, restful_authentication">How to add OpenID support to your Rails application with the open_id_authentication plugin</a></h2>
  <div class="details">
    <a style="background-color: #FFFF94;" href="http://snippets.aktagon.com/languages/124-Ruby">
      Ruby</a> posted about 1 year ago by christian
          
  </div>

  <div class="body">
    <p>These instructions have been tested with Rails 2.0.2 and ruby-openid 2.0.4. The snippet is an adaptation of the instructions in Ryan Bates&#8217; screencast on <a href="http://railscasts.com/episodes/68">how to integrate OpenID with Rails</a>.</p>


	<h2>Installing and configuring the restful_authentication plugin</h2>


	<p>Follow these instructions: <a href="http://snippets.aktagon.com/snippets/167-How-to-install-and-use-the-restful-authentication-Rails-plugin">How to install and use the restful_authentication Rails plugin</a>.</p>


	<h2>Installing the ruby-openid gem</h2>


	<p><pre class="active4d"><span class="line-numbers">   1 </span> gem install ruby<span class="Operator">-</span>openid
</pre></p>


	<h2>Installing the open_id_authentication Rails plugin</h2>


	<p><pre class="active4d"><span class="line-numbers">   1 </span> script<span class="Operator">/</span>plugin source http<span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>/</span><span class="Operator">/</span>svn.<span class="FunctionName">techno</span><span class="Operator">-</span>weenie.<span class="FunctionName">net</span><span class="Operator">/</span>projects<span class="Operator">/</span>plugins<span class="Operator">/</span>
<span class="line-numbers">   2 </span> script<span class="Operator">/</span>plugin install open_id_authentication
</pre></p>


	<h2>Create the migration files</h2>


	<p><pre class="active4d"><span class="line-numbers">   1 </span> rake open_id_authentication<span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>db</span><span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>create</span>
</pre></p>


	<p>Add the following to the self.up method in 002_add_open_id_authentication_tables.rb:</p>


	<p><pre class="active4d"><span class="line-numbers">   1 </span> add_column <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>users</span>, <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>identity_url</span>, <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>string</span>
</pre></p>


	<h2>Configuring the routes</h2>


	<p><pre class="active4d"><span class="line-numbers">   1 </span> map.<span class="FunctionName">open_id_complete</span> <span class="String"><span class="String">'</span>session<span class="String">'</span></span>, <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>controller</span> =&gt; <span class="String"><span class="String">&quot;</span>sessions<span class="String">&quot;</span></span>, <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>action</span> =&gt; <span class="String"><span class="String">&quot;</span>create<span class="String">&quot;</span></span>, <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>requirements</span> =&gt; { <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>method</span> =&gt; <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>get</span> }
</pre></p>


	<h2>Protect the identity_url field</h2>


	<p>Next protect the identity_url field, by adding the following to user.rb, account.rb or your custom user model:</p>


	<p><pre class="active4d"><span class="line-numbers">   1 </span> attr_accessible <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>login</span>, <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>email</span>, <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>password</span>, <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>password_confirmation</span>, <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>identity_url</span>
</pre></p>


	<p>Add the following to the self.down method in 002_add_open_id_authentication_tables.rb:</p>


<pre class="active4d"><span class="line-numbers">   1 </span> remove_column <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>users</span>, <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>identity_url</span>
</pre>
	<h2>Integrating Open-id with the login page</h2>


	<p>Add the following to sessions/new.html.erb:</p>


	<p><pre class="active4d"><span class="line-numbers">   1 </span> <span class="Operator">&lt;</span>label <span class="Keyword">for</span><span class="Operator">=</span><span class="String"><span class="String">&quot;</span>openid_url<span class="String">&quot;</span></span><span class="Operator">&gt;</span><span class="Variable">OpenID</span> <span class="Variable">URL</span><span class="Operator">&lt;</span><span class="Operator">/</span>label&gt;<span class="Operator">&lt;</span>br <span class="Operator">/</span><span class="Operator">&gt;</span>
<span class="line-numbers">   2 </span> <span class="Operator">&lt;</span><span class="Operator">%=</span> text_field_tag <span class="String"><span class="String">&quot;</span>openid_url<span class="String">&quot;</span></span> <span class="String"><span class="String">%&gt;</span></span>
</pre></p>


	<p>Make sure you&#8217;re showing flash messages, otherwise you won&#8217;t see the error messages:</p>


	<p><pre class="active4d"><span class="line-numbers">   1 </span> <span class="Operator">&lt;</span>html<span class="Operator">&gt;</span>
<span class="line-numbers">   2 </span>   <span class="Operator">&lt;</span>head&gt;<span class="Operator">&lt;</span><span class="Operator">/</span>head<span class="Operator">&gt;</span>
<span class="line-numbers">   3 </span>   <span class="Operator">&lt;</span>body<span class="Operator">&gt;</span>
<span class="line-numbers">   4 </span>     <span class="Operator">&lt;</span><span class="Operator">%=</span> [<span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>notice</span>, <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>error</span>].<span class="FunctionName">collect</span> {|<span class="Variable">type</span>| <span class="FunctionName">content_tag</span>(<span class="String"><span class="String">'</span>div<span class="String">'</span></span>, flash[type], <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>id</span> =&gt; type) <span class="Keyword">if</span> flash[type] } <span class="String"><span class="String">%&gt;</span></span>
<span class="line-numbers">   5 </span> <span class="String"></span>
<span class="line-numbers">   6 </span> <span class="String">    &lt;%= yield %<span class="String">&gt;</span></span>
<span class="line-numbers">   7 </span>   <span class="Operator">&lt;</span><span class="Operator">/</span>body<span class="Operator">&gt;</span>
<span class="line-numbers">   8 </span> <span class="Operator">&lt;</span><span class="Operator">/</span>html<span class="Operator">&gt;</span>
</pre></p>


	<h2>Modifying the sessions controller</h2>


	<p>Copy &#38; paste the following code in app/controllers/sessions_controller.rb:</p>


	<p><pre class="active4d"><span class="line-numbers">   1 </span> <span class="Keyword">class</span> <span class="TypeName">SessionsController<span class="InheritedClass"> <span class="InheritedClass">&lt;</span> ApplicationController</span></span>
<span class="line-numbers">   2 </span> <span class="LineComment">  <span class="LineComment">#</span> Hack to fix: No action responded to show</span>
<span class="line-numbers">   3 </span>   <span class="Keyword">def</span> <span class="FunctionName">show</span>
<span class="line-numbers">   4 </span>     create
<span class="line-numbers">   5 </span>   <span class="Keyword">end</span>
<span class="line-numbers">   6 </span> 
<span class="line-numbers">   7 </span>   <span class="Keyword">def</span> <span class="FunctionName">create</span>
<span class="line-numbers">   8 </span>     <span class="Keyword">if</span> using_open_id?
<span class="line-numbers">   9 </span>       <span class="FunctionName">open_id_authentication</span>(params[<span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>openid_url</span>])
<span class="line-numbers">  10 </span>     <span class="Keyword">else</span>
<span class="line-numbers">  11 </span>       <span class="FunctionName">password_authentication</span>(params[<span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>login</span>], params[<span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>password</span>])
<span class="line-numbers">  12 </span>     <span class="Keyword">end</span>
<span class="line-numbers">  13 </span>   <span class="Keyword">end</span>
<span class="line-numbers">  14 </span> 
<span class="line-numbers">  15 </span>   <span class="Keyword">def</span> <span class="FunctionName">destroy</span>
<span class="line-numbers">  16 </span>     <span class="Variable">self</span>.<span class="FunctionName">current_user</span>.<span class="FunctionName">forget_me</span> <span class="Keyword">if</span> logged_in?
<span class="line-numbers">  17 </span>     cookies.<span class="FunctionName">delete</span> <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>auth_token</span>
<span class="line-numbers">  18 </span>     reset_session
<span class="line-numbers">  19 </span>     flash[<span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>notice</span>] <span class="Operator">=</span> <span class="String"><span class="String">&quot;</span>You have been logged out.<span class="String">&quot;</span></span>
<span class="line-numbers">  20 </span>     <span class="FunctionName">redirect_back_or_default</span>(<span class="String"><span class="String">'</span>/<span class="String">'</span></span>)
<span class="line-numbers">  21 </span>   <span class="Keyword">end</span>
<span class="line-numbers">  22 </span> 
<span class="line-numbers">  23 </span>   <span class="Keyword">protected</span>
<span class="line-numbers">  24 </span> 
<span class="line-numbers">  25 </span>   <span class="Keyword">def</span> <span class="FunctionName">open_id_authentication</span>(<span class="FunctionArgument">openid_url</span>)
<span class="line-numbers">  26 </span>     <span class="FunctionName">authenticate_with_open_id</span>(openid_url, <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>required</span> =&gt; [<span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>nickname</span>, <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>email</span>]) <span class="Keyword">do </span>|<span class="Variable">result</span>, <span class="Variable">identity_url</span>, <span class="Variable">registration</span>|
<span class="line-numbers">  27 </span>       <span class="Keyword">if</span> result.<span class="FunctionName">successful?</span>
<span class="line-numbers">  28 </span>         <span class="Variable"><span class="Variable">@</span>user</span> <span class="Operator">=</span> <span class="LibraryClassType">User</span>.<span class="FunctionName">find_or_initialize_by_identity_url</span>(identity_url)
<span class="line-numbers">  29 </span>         <span class="Keyword">if</span> <span class="Variable"><span class="Variable">@</span>user</span>.<span class="FunctionName">new_record?</span>
<span class="line-numbers">  30 </span>           <span class="Variable"><span class="Variable">@</span>user</span>.<span class="FunctionName">login</span> <span class="Operator">=</span> registration[<span class="String"><span class="String">'</span>nickname<span class="String">'</span></span>]
<span class="line-numbers">  31 </span>           <span class="Variable"><span class="Variable">@</span>user</span>.<span class="FunctionName">email</span> <span class="Operator">=</span> registration[<span class="String"><span class="String">'</span>email<span class="String">'</span></span>]
<span class="line-numbers">  32 </span>           <span class="Variable"><span class="Variable">@</span>user</span>.<span class="FunctionName">save</span>(<span class="BuiltInConstant">false</span>)
<span class="line-numbers">  33 </span>         <span class="Keyword">end</span>
<span class="line-numbers">  34 </span>         <span class="Variable">self</span>.<span class="FunctionName">current_user</span> <span class="Operator">=</span> <span class="Variable"><span class="Variable">@</span>user</span>
<span class="line-numbers">  35 </span>         successful_login
<span class="line-numbers">  36 </span>       <span class="Keyword">else</span>
<span class="line-numbers">  37 </span>         failed_login result.<span class="FunctionName">message</span>
<span class="line-numbers">  38 </span>       <span class="Keyword">end</span>
<span class="line-numbers">  39 </span>     <span class="Keyword">end</span>
<span class="line-numbers">  40 </span>   <span class="Keyword">end</span>
<span class="line-numbers">  41 </span> 
<span class="line-numbers">  42 </span>   <span class="Keyword">def</span> <span class="FunctionName">password_authentication</span>(<span class="FunctionArgument">login<span class="FunctionArgument">,</span> password</span>)
<span class="line-numbers">  43 </span>     <span class="Variable">self</span>.<span class="FunctionName">current_user</span> <span class="Operator">=</span> <span class="LibraryClassType">User</span>.<span class="FunctionName">authenticate</span>(login, password)
<span class="line-numbers">  44 </span>     <span class="Keyword">if</span> logged_in?
<span class="line-numbers">  45 </span>       successful_login
<span class="line-numbers">  46 </span>     <span class="Keyword">else</span>
<span class="line-numbers">  47 </span>       failed_login
<span class="line-numbers">  48 </span>     <span class="Keyword">end</span>
<span class="line-numbers">  49 </span>   <span class="Keyword">end</span>
<span class="line-numbers">  50 </span> 
<span class="line-numbers">  51 </span>   <span class="Keyword">def</span> <span class="FunctionName">failed_login</span>(<span class="FunctionArgument">message <span class="Operator">=</span> <span class="String"><span class="String">&quot;</span>Authentication failed.<span class="String">&quot;</span></span></span>)
<span class="line-numbers">  52 </span>     flash.<span class="FunctionName">now</span>[<span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>error</span>] <span class="Operator">=</span> message
<span class="line-numbers">  53 </span>     render <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>action</span> =&gt; <span class="String"><span class="String">'</span>new<span class="String">'</span></span>
<span class="line-numbers">  54 </span>   <span class="Keyword">end</span>
<span class="line-numbers">  55 </span> 
<span class="line-numbers">  56 </span>   <span class="Keyword">def</span> <span class="FunctionName">successful_login</span>
<span class="line-numbers">  57 </span>     <span class="Keyword">if</span> params[<span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>remember_me</span>] <span class="Operator">==</span> <span class="String"><span class="String">&quot;</span>1<span class="String">&quot;</span></span>
<span class="line-numbers">  58 </span>       <span class="Variable">self</span>.<span class="FunctionName">current_user</span>.<span class="FunctionName">remember_me</span>
<span class="line-numbers">  59 </span>       cookies[<span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>auth_token</span>] <span class="Operator">=</span> { <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>value</span> =&gt; <span class="Variable">self</span>.<span class="FunctionName">current_user</span>.<span class="FunctionName">remember_token</span> , <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>expires</span> =&gt; <span class="Variable">self</span>.<span class="FunctionName">current_user</span>.<span class="FunctionName">remember_token_expires_at</span> }
<span class="line-numbers">  60 </span>     <span class="Keyword">end</span>
<span class="line-numbers">  61 </span>     <span class="FunctionName">redirect_back_or_default</span>(<span class="String"><span class="String">'</span>/<span class="String">'</span></span>)
<span class="line-numbers">  62 </span>     flash[<span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>notice</span>] <span class="Operator">=</span> <span class="String"><span class="String">&quot;</span>Logged in successfully<span class="String">&quot;</span></span>
<span class="line-numbers">  63 </span>   <span class="Keyword">end</span>
<span class="line-numbers">  64 </span> <span class="Keyword">end</span>
</pre></p>


	<h2>OpenID authentication from behind a proxy</h2>


	<p>First, set the  HTTP _PROXY environment variable to the proxy  URL :</p>


	<p><pre class="active4d"><span class="line-numbers">   1 </span> export <span class="Variable">HTTP_PROXY</span><span class="Operator">=</span>http<span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>/</span><span class="Operator">/</span>proxy.<span class="FunctionName">aktagon</span>.<span class="FunctionName">com</span>:<span class="Number">8080</span><span class="Operator">/</span>
</pre></p>


	<p>Then add the following to environment.rb:</p>


	<p><pre class="active4d"><span class="line-numbers">   1 </span> <span class="LibraryClassType">OpenID</span>::<span class="FunctionName">fetcher_use_env_http_proxy</span>
</pre></p>
  </div>

  <div style="font-size: 0.8em;margin:0.5em;">
    
      Tagged <a href="/tags/422-openid">openid</a>, <a href="/tags/400-authentication">authentication</a>, <a href="/tags/9-rails">rails</a>, <a href="/tags/8-ruby">ruby</a>, <a href="/tags/357-plugin">plugin</a>, <a href="/tags/421-restful-authentication">restful_authentication</a>
    
    
  </div>
</div>



  
<div id="snippet_167" class="snippet">
  <h2><a href="/snippets/167-How-to-install-and-use-the-restful-authentication-Rails-plugin" title="How to install and use the restful_authentication Rails plugin - Ruby - rails, ruby, authentication, restful_authentication">How to install and use the restful_authentication Rails plugin</a></h2>
  <div class="details">
    <a style="background-color: #FFFF94;" href="http://snippets.aktagon.com/languages/124-Ruby">
      Ruby</a> posted about 1 year ago by christian
          
  </div>

  <div class="body">
    <p>This is an adaptation of the <a href="http://railscasts.com/episodes/67">restful_authentication screencast</a> by Ryan Bates, which has an issue with Rails 2.0.3 that throws the following error:</p>


	<p><pre class="active4d"><span class="line-numbers">   1 </span> <span class="Variable">NameError</span> (uninitialized constant <span class="Variable">SessionsController</span>):
<span class="line-numbers">   2 </span>     <span class="String"><span class="String">/</span></span><span class="String">usr</span><span class="String"><span class="String">/</span></span>local<span class="Operator">/</span>lib<span class="Operator">/</span>ruby<span class="Operator">/</span>gems<span class="Operator">/</span><span class="Number">1.8</span><span class="Operator">/</span>gems<span class="Operator">/</span>activesupport<span class="Operator">-</span><span class="Number">2.0</span>.<span class="Number">2</span><span class="Operator">/</span>lib<span class="Operator">/</span>active_support<span class="Operator">/</span>dependencies.<span class="FunctionName">rb</span>:<span class="Number">266</span><span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>in</span> <span class="String"><span class="String">`</span>load_missing_constant'</span>
<span class="line-numbers">   3 </span> <span class="String">    /usr/local/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:453:in <span class="String">`</span></span>const_missing<span class="String"><span class="String">'</span></span>
<span class="line-numbers">   4 </span> <span class="String">    /usr/local/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:465:in `const_missing<span class="String">'</span></span>
<span class="line-numbers">   5 </span>     <span class="String"><span class="String">/</span></span><span class="String">usr</span><span class="String"><span class="String">/</span></span>local<span class="Operator">/</span>lib<span class="Operator">/</span>ruby<span class="Operator">/</span>gems<span class="Operator">/</span><span class="Number">1.8</span><span class="Operator">/</span>gems<span class="Operator">/</span>activesupport<span class="Operator">-</span><span class="Number">2.0</span>.<span class="Number">2</span><span class="Operator">/</span>lib<span class="Operator">/</span>active_support<span class="Operator">/</span>inflector.<span class="FunctionName">rb</span>:<span class="Number">257</span><span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>in</span> <span class="String"><span class="String">`</span>constantize'</span>
</pre></p>


	<h2>Installing the restful_authentication plugin</h2>


	<p><pre class="active4d"><span class="line-numbers">   1 </span> script<span class="Operator">/</span>plugin source http<span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>/</span><span class="Operator">/</span>svn.<span class="FunctionName">techno</span><span class="Operator">-</span>weenie.<span class="FunctionName">net</span><span class="Operator">/</span>projects<span class="Operator">/</span>plugins<span class="Operator">/</span>
<span class="line-numbers">   2 </span> script<span class="Operator">/</span>plugin install restful_authentication
</pre></p>


	<h2>Generating the model and controller</h2>


	<p><pre class="active4d"><span class="line-numbers">   1 </span> script<span class="Operator">/</span>generate authenticated user sessions
</pre></p>


	<p>Now run the migration:
<pre class="active4d"><span class="line-numbers">   1 </span> rake db<span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>migrate</span>
</pre></p>


	<h2>Configure routing</h2>


	<p>Open config/routes.rb and add the following routes:</p>


	<p><pre class="active4d"><span class="line-numbers">   1 </span> map.<span class="FunctionName">resources</span> <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>users</span>
<span class="line-numbers">   2 </span> map.<span class="FunctionName">resource</span>  <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>session</span>
<span class="line-numbers">   3 </span> 
<span class="line-numbers">   4 </span> map.<span class="FunctionName">signup</span> <span class="String"><span class="String">'</span>/signup<span class="String">'</span></span>, <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>controller</span> =&gt; <span class="String"><span class="String">'</span>users<span class="String">'</span></span>, <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>action</span> =&gt; <span class="String"><span class="String">'</span>new<span class="String">'</span></span>
<span class="line-numbers">   5 </span> map.<span class="FunctionName">login</span>  <span class="String"><span class="String">'</span>/login<span class="String">'</span></span>, <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>controller</span> =&gt; <span class="String"><span class="String">'</span>sessions<span class="String">'</span></span>, <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>action</span> =&gt; <span class="String"><span class="String">'</span>new<span class="String">'</span></span>
<span class="line-numbers">   6 </span> map.<span class="FunctionName">logout</span> <span class="String"><span class="String">'</span>/logout<span class="String">'</span></span>, <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>controller</span> =&gt; <span class="String"><span class="String">'</span>sessions<span class="String">'</span></span>, <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>action</span> =&gt; <span class="String"><span class="String">'</span>destroy<span class="String">'</span></span>
</pre></p>


	<h2>Include restful_authentication in ApplicationController</h2>


	<p>First remove these lines from the users and sessions controllers:</p>


	<p><pre class="active4d"><span class="line-numbers">   1 </span> <span class="LineComment"><span class="LineComment">#</span> Be sure to include AuthenticationSystem in Application Controller instead</span>
<span class="line-numbers">   2 </span>   <span class="Keyword">include</span> <span class="Variable">AuthenticatedSystem</span>
</pre></p>


	<p>Now include restful_authentication in the application controller:</p>


	<p><pre class="active4d"><span class="line-numbers">   1 </span> <span class="Keyword">class</span> <span class="TypeName">ApplicationController<span class="InheritedClass"> <span class="InheritedClass">&lt;</span> ActionController::Base</span></span>
<span class="line-numbers">   2 </span>   <span class="Keyword">include</span> <span class="Variable">AuthenticatedSystem</span>
</pre></p>


	<h2>Integrate restful_authentication with your views</h2>


	<p>First let&#8217;s create a controller and view by executing the generate script:</p>


	<p><pre class="active4d"><span class="line-numbers">   1 </span> script<span class="Operator">/</span>generate controller home index
</pre></p>


	<p>Modify index.html.erb as follows:</p>


	<p><pre class="active4d"><span class="line-numbers">   1 </span> <span class="Operator">&lt;</span>h1<span class="Operator">&gt;</span><span class="Variable">Welcome</span><span class="Operator">&lt;</span><span class="Operator">/</span>h1<span class="Operator">&gt;</span>
<span class="line-numbers">   2 </span> 
<span class="line-numbers">   3 </span> <span class="Operator">&lt;</span><span class="Operator">%</span> <span class="Keyword">if</span> logged_in? <span class="String"><span class="String">%&gt;</span></span>
<span class="line-numbers">   4 </span> <span class="String">  &lt;p<span class="String">&gt;</span></span><span class="Operator">&lt;</span>strong<span class="Operator">&gt;</span><span class="Variable">You</span> are logged <span class="Keyword">in</span> as <span class="Operator">&lt;</span><span class="Operator">%=</span>h current_user.<span class="FunctionName">login</span> <span class="String"><span class="String">%&gt;</span>&lt;/strong<span class="String">&gt;</span></span><span class="Operator">&lt;</span><span class="Operator">/</span>p<span class="Operator">&gt;</span>
<span class="line-numbers">   5 </span>   <span class="Operator">&lt;</span>p&gt;<span class="Operator">&lt;</span><span class="Operator">%=</span> link_to <span class="String"><span class="String">'</span>Logout<span class="String">'</span></span>, logout_path <span class="String"><span class="String">%&gt;</span>&lt;/p<span class="String">&gt;</span></span>
<span class="line-numbers">   6 </span> <span class="Operator">&lt;</span><span class="Operator">%</span> <span class="Keyword">else</span> <span class="String"><span class="String">%&gt;</span></span>
<span class="line-numbers">   7 </span> <span class="String">  &lt;p<span class="String">&gt;</span></span><span class="Operator">&lt;</span>strong<span class="Operator">&gt;</span><span class="Variable">You</span> are currently <span class="Operator">not</span> logged <span class="Keyword">in</span>.<span class="Operator">&lt;</span><span class="Operator">/</span>strong&gt;<span class="Operator">&lt;</span><span class="Operator">/</span>p<span class="Operator">&gt;</span>
<span class="line-numbers">   8 </span>   <span class="Operator">&lt;</span>p<span class="Operator">&gt;</span>
<span class="line-numbers">   9 </span>     <span class="Operator">&lt;</span><span class="Operator">%=</span> link_to <span class="String"><span class="String">'</span>Login<span class="String">'</span></span>, login_path <span class="String"><span class="String">%&gt;</span> or</span>
<span class="line-numbers">  10 </span> <span class="String">    &lt;%= link_to 'Sign Up', signup_path %<span class="String">&gt;</span></span>
<span class="line-numbers">  11 </span>   <span class="Operator">&lt;</span><span class="Operator">/</span>p<span class="Operator">&gt;</span>
<span class="line-numbers">  12 </span> <span class="Operator">&lt;</span><span class="Operator">%</span> <span class="Keyword">end</span> <span class="String"><span class="String">%&gt;</span></span>
</pre></p>


	<p>Start Rails and access your application. If needed, add the following to config/routes.rb to make the home controller the default:</p>


	<p><pre class="active4d"><span class="line-numbers">   1 </span> map.<span class="FunctionName">root</span> <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>controller</span> =&gt; <span class="String"><span class="String">&quot;</span>home<span class="String">&quot;</span></span>
</pre></p>


	<p>Login, sign up and logout should work.</p>
  </div>

  <div style="font-size: 0.8em;margin:0.5em;">
    
      Tagged <a href="/tags/9-rails">rails</a>, <a href="/tags/8-ruby">ruby</a>, <a href="/tags/400-authentication">authentication</a>, <a href="/tags/421-restful-authentication">restful_authentication</a>
    
    
  </div>
</div>



  
<div id="snippet_78" class="snippet">
  <h2><a href="/snippets/78-How-to-install-the-exception-logger-Rails-plugin-and-protect-the-logs-with-basic-authentication" title="How to install the exception_logger Rails plugin and protect the logs with basic authentication - Ruby - ruby, exception_logger, install, routes, rails, basic, authentication">How to install the exception_logger Rails plugin and protect the logs with basic authentication</a></h2>
  <div class="details">
    <a style="background-color: #FFFF94;" href="http://snippets.aktagon.com/languages/124-Ruby">
      Ruby</a> posted over 2 years ago by christian
          
  </div>

  <div class="body">
    <p>This snippet explains how to install and use the Rails exception_logger plugin. I&#8217;ll also show you how to protect your logs by extending the plugin with basic authentication.</p>


	<p><pre class="active4d"><span class="line-numbers">   1 </span> script<span class="Operator">/</span>plugin source http<span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>/</span><span class="Operator">/</span>svn.<span class="FunctionName">techno</span><span class="Operator">-</span>weenie.<span class="FunctionName">net</span><span class="Operator">/</span>projects<span class="Operator">/</span>plugins
<span class="line-numbers">   2 </span> script<span class="Operator">/</span>plugin install exception_logger
</pre></p>


	<p>I&#8217;m using Rails Edge on this project, so I had to install classic pagination also:
<pre class="active4d"><span class="line-numbers">   1 </span> script<span class="Operator">/</span>plugin install svn<span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>/</span><span class="Operator">/</span>errtheblog.<span class="FunctionName">com</span><span class="Operator">/</span>svn<span class="Operator">/</span>plugins<span class="Operator">/</span>classic_pagination
</pre></p>


	<p>Next create and execute the migration file:</p>


	<p><pre class="active4d"><span class="line-numbers">   1 </span> .<span class="Operator">/</span>script<span class="Operator">/</span>generate exception_migration
<span class="line-numbers">   2 </span> rake db<span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>migrate</span>
</pre></p>


	<p>Before starting the server we need to setup the routes:</p>


	<p><pre class="active4d"><span class="line-numbers">   1 </span> map.<span class="FunctionName">exceptions</span> <span class="String"><span class="String">'</span>/logged_exceptions/:action/:id<span class="String">'</span></span>, <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>controller</span> =&gt; <span class="String"><span class="String">'</span>logged_exceptions<span class="String">'</span></span>, <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>action</span> =&gt; <span class="String"><span class="String">'</span>index<span class="String">'</span></span>, <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>id</span> =&gt; <span class="BuiltInConstant">nil</span> 
</pre></p>


	<p>You also need to include the ExceptionLoggable in your ApplicationController:</p>


	<p><pre class="active4d"><span class="line-numbers">   1 </span> <span class="Keyword">class</span> <span class="TypeName">ApplicationController<span class="InheritedClass"> <span class="InheritedClass">&lt;</span> ActionController::Base</span></span>
<span class="line-numbers">   2 </span>   <span class="Keyword">include</span> <span class="Variable">ExceptionLoggable</span>
<span class="line-numbers">   3 </span> ...
</pre></p>


	<p>Start your server and access the exception log at /logged_exceptions.</p>


	<p>Exceptions can contain email addresses, passwords, credit card numbers, so you&#8217;ll want to protect /logged_exceptions from the public. This can be done by adding the following code to the end of environment.rb:</p>


	<p><pre class="active4d"><span class="line-numbers">   1 </span> config.<span class="FunctionName">after_initialize</span> <span class="Keyword">do</span>
<span class="line-numbers">   2 </span>   <span class="Keyword">require</span> <span class="String"><span class="String">'</span>application<span class="String">'</span></span> <span class="Keyword">unless</span> <span class="LibraryClassType">Object</span>.<span class="FunctionName">const_defined?</span>(<span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>ApplicationController</span>)
<span class="line-numbers">   3 </span>   <span class="LibraryClassType">LoggedExceptionsController</span>.<span class="FunctionName">class_eval</span> <span class="Keyword">do</span>
<span class="line-numbers">   4 </span>     before_filter <span class="UserDefinedConstant"><span class="UserDefinedConstant">:</span>authenticate</span>
<span class="line-numbers">   5 </span> 
<span class="line-numbers">   6 </span>     <span class="Keyword">protected</span>
<span class="line-numbers">   7 </span> 
<span class="line-numbers">   8 </span>     <span class="Keyword">def</span> <span class="FunctionName">authenticate</span>
<span class="line-numbers">   9 </span>       authenticate_or_request_with_http_basic <span class="Keyword">do </span>|<span class="Variable">username</span>, <span class="Variable">password</span>|
<span class="line-numbers">  10 </span>         username <span class="Operator">==</span> <span class="String"><span class="String">&quot;</span>foo<span class="String">&quot;</span></span> <span class="Operator">&amp;&amp;</span> password <span class="Operator">==</span> <span class="String"><span class="String">&quot;</span>bar<span class="String">&quot;</span></span>
<span class="line-numbers">  11 </span>       <span class="Keyword">end</span>
<span class="line-numbers">  12 </span>     <span class="Keyword">end</span>
<span class="line-numbers">  13 </span>   <span class="Keyword">end</span>
<span class="line-numbers">  14 </span> <span class="Keyword">end</span>
</pre></p>


	<p>With this code we add a before filter that shows a login dialog to anyone trying to access /logged_exception/. Note that this requires Rails 2.0 basic authentication to work, so make sure you have the proper version installed.</p>
  </div>

  <div style="font-size: 0.8em;margin:0.5em;">
    
      Tagged <a href="/tags/8-ruby">ruby</a>, <a href="/tags/187-exception-logger">exception_logger</a>, <a href="/tags/188-install">install</a>, <a href="/tags/189-routes">routes</a>, <a href="/tags/9-rails">rails</a>, <a href="/tags/399-basic">basic</a>, <a href="/tags/400-authentication">authentication</a>
    
    
  </div>
</div>






