English 中文(简体)
How to get current user using devise in rails without using authenticate! on the controller
原标题:

I m using devise with rails 3 and i m trying to create a page which can be viewed by everyone (even those not signed up) but has additional functionality for people who are registered.

The problem is that when I call current_user there is no user because I haven t used the authenticate! filter on my controller, because I want unregistered users to be able to view it.

How do I sign in a user if they are in the session otherwise leaving it without a user?

问题回答

You can use user_signed_in? to add additional functionality in views.

<% if user_signed_in? %>
... for logged in users only and current_user is not nil here....
<% else %>
... for anonymous users only and current_user is nil here....
<% end %>

The only way I can think to do this is to call it everytime you want to call current user, which probably isn t the best solution... so it would be something like

if user_signed_in?
#code for current_user
else
#code for no current_user object
end

Just a quick note. I wanted to find out if an admin user was logged in, and if so provide some helpful links & info on the public view page, so the admin could quickly jump to the admin section to edit the resource.

However if you generate your user as AdminUser(following the getting started instructions for ActiveAdmin) then the methods user_signed_in? and current_user are admin_user_signed_in? and current_admin_user.

So for example in a public view to show a post (views/posts/show.html.erb) I can use (simplified for clarity)

<div id= show_post_<%= @post.id %> >
    <h2><%= @post.title %></h2>
    <div class= post_author >by: <%= @post.author%></div>
    <% if admin_user_signed_in? %>
    <div class= admin_links >Put links to admin pages for: 
        <%= current_admin_user.email %>
    </div>
    <% end %>

    <div class= post_body >
        <%= raw @post.content %>
    </div>
</div>

I expect that the method names will be generated based on whatever you used when you set up your users in ActiveAdmin or Devise (if you named your user model Vip then the method would be vip_signed_in?).

Not to nitpick, but it seems like both work in the same places, it is just that current_user isn t initialized if no user is signed in.

Here s a scrap of a line from a related idea, it s from a before_filter which prohibits users from editing items which don t belong to them

user_signed_in? && (@subscription.user_id == current_user.id || current_user.admin)

You have to wrap the whole bit with an && on user_signed_in? though, or it will crash when no user is signed in.





相关问题
rails collection_select vs. select

collection_select and select Rails helpers: Which one should I use? I can t see a difference in both ways. Both helpers take a collection and generates options tags inside a select tag. Is there a ...

SSL slowness in EC2

We ve deployed our rails app to EC2. In our setup, we have two proxies on small instances behind round-robin DNS. These run nginx load balancers for a dynamically growing and shrinking farm of web ...

Auth-code with A-Za-z0-9 to use in an URL parameter

As part of a web application I need an auth-code to pass as a URL parameter. I am currently using (in Rails) : Digest::SHA1.hexdigest((object_id + rand(255)).to_s) Which provides long strings like : ...

RubyCAS-Client question: Rails

I ve installed RubyCAS-Client version 2.1.0 as a plugin within a rails app. It s working, but I d like to remove the ?ticket= in the url. Is this possible?

activerecord has_many :through find with one sql call

I have a these 3 models: class User < ActiveRecord::Base has_many :permissions, :dependent => :destroy has_many :roles, :through => :permissions end class Permission < ActiveRecord::...

Ordering a hash to xml: Rails

I m building an xml document from a hash. The xml attributes need to be in order. How can this be accomplished? hash.to_xml

Text Editor for Ruby-on-Rails

guys which text editor is good for Rubyonrails? i m using Windows and i was using E-Texteditor but its not free n its expired now can anyone plese tell me any free texteditor? n which one is best an ...

How to get SQL queries for each user where env is production

I’m developing an application dedicated to generate statistical reports, I would like that user after saving their stat report they save sql queries too. To do that I wrote the following module: ...

热门标签