Heyya guys.
So i thought about this coolio idea, if you are logged in then you get some sort of dashboard, else you get an information/login/sign up page.. So how do i do that..
I mostly wants to do this in Routes = not something like
def index
if current_user.present?
render :action => 'logged_in'
else
render :action => 'logged_out'
end
end
thanks in advance!
/ Oluf Nielsen
Think you may have been looking for this:
authenticated :user do
root :to => "dashboard#show"
end
root :to => "devise/sessions#new"
Note: it's authenticate*d*
I too wanted this in my app, here's what I came up with.
MyCoolioApp::Application.routes.draw do
root :to => 'users#dashboard', :constraints => lambda {|r| r.env["warden"].authenticate? }
root :to => 'welcome#index'
get "/" => 'users#dashboard', :as => "user_root"
# ..
end
In Rails 3 you can use Request Based Contraints to dynamically map your root
route. The solution above works for the Devise authentication gem but can be modified to support your own implementation.
With the above root_path
or /
will route to a WelcomeController#index
action for un-authenticated requests. When a user is logged in the same root_path
will route to UsersController#dashboard
.
Hope this helps.
I have the same problem and I solved it with this:
authenticated :user do
root :to => "wathever#index"
end
unauthenticated :user do
devise_scope :user do
get "/" => "devise/sessions#new"
end
end
Hope it helps.
are you using devise's before filters?
class FooController < ActionController::Base
before_filter :authenticate_user!
...
Why don't you try altering the default login views so they have the info/login/signup infos you want.
Here's what I'm using in my application layout file right now. Haven't broken it out into partials yet:
<% if user_signed_in? %>
<a href="/profile"><%= current_user.email %></a> |
<%= link_to "Logout", destroy_user_session_path %>
<% else %>
<%= link_to "Login", new_user_session_path %> |
<%= link_to "Register", new_user_registration_path %>
<% end %>