Laravel Force HTTPS
Posted in Web Development on 06.10.2015 by @chasebadkids
Posted in Web Development on 06.10.2015 by @chasebadkids
Using App::before
You might be able to take advantage of the App::before()
block in the app/filters.php
file.
Change the block to include a simple check to see if the current request is secure, and if not, redirect it.
1 2 3 4 5 6 7 |
<span class="typ">App</span><span class="pun">::</span><span class="pln">before</span><span class="pun">(</span><span class="kwd">function</span><span class="pun">(</span><span class="pln">$request</span><span class="pun">)</span> <span class="pun">{</span> <span class="kwd">if</span><span class="pun">(</span> <span class="pun">!</span> <span class="typ">Request</span><span class="pun">::</span><span class="pln">secure</span><span class="pun">())</span> <span class="pun">{</span> <span class="kwd">return</span> <span class="typ">Redirect</span><span class="pun">::</span><span class="pln">secure</span><span class="pun">(</span><span class="typ">Request</span><span class="pun">::</span><span class="pln">path</span><span class="pun">());</span> <span class="pun">}</span> <span class="pun">});</span> |
Using Filters
Another option might be to create a filter like so. People generally store this also in app/filters.php
.
1 2 3 4 5 6 7 8 |
<span class="typ">Route</span><span class="pun">::</span><span class="pln">filter</span><span class="pun">(</span><span class="str">'force.ssl'</span><span class="pun">,</span> <span class="kwd">function</span><span class="pun">()</span> <span class="pun">{</span> <span class="kwd">if</span><span class="pun">(</span> <span class="pun">!</span> <span class="typ">Request</span><span class="pun">::</span><span class="pln">secure</span><span class="pun">())</span> <span class="pun">{</span> <span class="kwd">return</span> <span class="typ">Redirect</span><span class="pun">::</span><span class="pln">secure</span><span class="pun">(</span><span class="typ">Request</span><span class="pun">::</span><span class="pln">path</span><span class="pun">());</span> <span class="pun">}</span> <span class="pun">});</span> |
You can then enforce that new filter to any of your routes, route groups, or controllers like this.
Individual Route
1 2 3 4 |
<span class="typ">Route</span><span class="pun">::</span><span class="kwd">get</span><span class="pun">(</span><span class="str">'something'</span><span class="pun">,</span> <span class="pun">[</span><span class="str">'before'</span> <span class="pun">=></span> <span class="str">'force.ssl'</span><span class="pun">,</span> <span class="kwd">function</span><span class="pun">()</span> <span class="pun">{</span> <span class="kwd">return</span> <span class="str">"This will be forced SSL"</span><span class="pun">;</span> <span class="pun">}];</span> |
Route Group
1 2 3 4 |
<span class="typ">Route</span><span class="pun">::</span><span class="kwd">group</span><span class="pun">([</span><span class="str">'before'</span> <span class="pun">=></span> <span class="str">'force.ssl'</span><span class="pun">,</span> <span class="kwd">function</span><span class="pun">()</span> <span class="pun">{</span> <span class="com">// Routes here.</span> <span class="pun">}</span> |
Controller
You’ll need to do this in your controller’s __construct()
method.
1 2 3 4 |
<span class="kwd">public</span> <span class="kwd">function</span><span class="pln"> __construct</span><span class="pun">()</span> <span class="pun">{</span><span class="pln"> $this</span><span class="pun">-></span><span class="pln">beforeFilter</span><span class="pun">(</span><span class="str">'force.ssl'</span><span class="pun">);</span> <span class="pun">}</span> |