Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rails: In Application Controller, force login, redirect all requests except login

I'd like a simple method in my application controller that requires all users to log in before continuing to any part of the site. I'm using Devise for authentication.

I tried:

class ApplicationController < ActionController::Base
  ...
  unless user_signed_in?
    redirect_to login_path
  end
  ...
end

This successfully redirects everyone, but the problem is it also prevents the post request necessary to create a new user session.

So my question is, how would you go about blocking all requests except for the login view and the post request for logging in?

like image 963
Andrew Avatar asked Jul 13 '11 15:07

Andrew


1 Answers

Using Devise this is easy. You just need to add before_filter :authenticate_user! to your ApplicationController.

This is all spelled out in the Devise wiki - https://github.com/plataformatec/devise

Note that in Rails 4.2+, before_action :authenticate_user! is preferred.

like image 99
pcg79 Avatar answered Nov 08 '22 21:11

pcg79