开发者

Show Different Home Pages Based on Logged In Status in Rails

I'm using the restful authentication plugin to authenticate users for an application I'm building. As in most good sites when a user visits the homepage I want to show a boilerplate welcome page and have the option to login or signup. However when a user is logged in I want t开发者_开发技巧he root url of the site (i.e. sitename.com ) to show a user dashboard instead of the standard greeting page. I'm assuming this is simply accomplished using layout files and checking to see if the user is logged_in? but the logic of it seems to be stumping me. Many thanks in advance.


I would do it like so: you'd have your main controller which non-logged in users can access, and then a second controller (let's call it admin/main) which is the main page for logged in users.

In the index action of the main controller (assuming you just want to redirect the index action; otherwise, you could use a before_filter):

class MainController < ApplicationController
  def index
    redirect_to :controller => 'admin/main', :action => 'index' and return if logged_in?
  end
end

This way, if a logged in user tries to access the root URL of your application, they will be automatically redirected to the logged-in area of the site (but the URL won't change).


You can check whether the user is already logged in when they hit your login action and, if they are redirect to your dashboard action. If they aren't then you can carry on with logging in as normal. E.g. in your sessions controller

def new
  if logged_in?
    redirect_to :controller => 'dashboard', :action => 'index'
  end
end

You could also do it in a before_filter to avoid 'polluting' your login action. E.g.

before_filter :logged_in_users_go_to_dashboard, :only => [:create, :new]

def logged_in_users_go_to_dashboard
  redirect_to(:controller => 'dashboard', :action => 'index') if logged_in?
end
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜