lib/authpwn_rails/session.rb in authpwn_rails-0.5.6 vs lib/authpwn_rails/session.rb in authpwn_rails-0.6.0
- old
+ new
@@ -52,18 +52,36 @@
return true if current_user
user_param = session[:current_user_pid]
user = user_param && User.find_by_param(user_param)
self.current_user = user if user
end
- private :authenticate_using_session
+ private :authenticate_using_session
+
+ # Inform the user that their request is forbidden.
+ #
+ # If a user is logged on, this renders the session/forbidden view with a HTTP
+ # 403 code.
+ #
+ # If no user is logged in, the user is redirected to session/new, and the
+ # current request's URL is saved in flash[:auth_redirect_url].
+ def bounce_user(redirect_url = request.url)
+ @redirect_url = redirect_url
+ if current_user
+ render 'session/forbidden', :status => :forbidden
+ else
+ flash[:auth_redirect_url] = redirect_url
+ render 'session/forbidden', :status => :forbidden
+ end
+ end
end
# Included in controllers that call authenticates_using_session.
module SessionControllerInstanceMethods
# GET /session/new
def new
@user = User.new
+ @redirect_url = flash[:auth_redirect_url]
redirect_to session_url if current_user
end
# GET /session
def show
@@ -78,18 +96,21 @@
end
# POST /session
def create
@user = User.new params[:user]
+ @redirect_url = params[:redirect_url] || session_url
self.current_user =
User.find_by_email_and_password @user.email, @user.password
respond_to do |format|
if current_user
- format.html { redirect_to session_url }
+ format.html { redirect_to @redirect_url }
else
format.html do
- redirect_to new_session_url, :notice => 'Invalid e-mail or password'
+ redirect_to new_session_url, :flash => {
+ :notice => 'Invalid e-mail or password',
+ :auth_redirect_url => @redirect_url }
end
end
end
end