如何在不使用身份验证的情况下使用rails中的设备获取当前用户!在控制器上

时间:2010-11-20 23:56:58

标签: ruby-on-rails devise activeadmin

我正在使用rails 3设计,我正在尝试创建一个可供所有人查看的页面(即使是那些未注册的页面),但还为已注册的人员提供了附加功能。

问题是当我调用current_user时没有用户,因为我没有使用身份验证!在我的控制器上过滤,因为我希望未注册的用户能够查看它。

如果用户在会话中,如何在没有用户的情况下离开用户,我该如何登录?

4 个答案:

答案 0 :(得分:14)

您可以使用user_signed_in?在视图中添加其他功能。

<% 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 %>

答案 1 :(得分:1)

我能想到的唯一方法是每次想要调用当前用户时调用它,这可能不是最好的解决方案...... 所以它会像

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

答案 2 :(得分:1)

快速说明一下。我想知道管理员用户是否已登录,如果是,请提供一些有用的链接&amp;公共视图页面上的信息,以便管理员可以快速跳转到管理部分来编辑资源。

然而如果您将用户生成为AdminUser(遵循ActiveAdmin的入门说明),那么方法 user_signed_in? current_user 为< strong> admin_user_signed_in?和 current_admin_user

所以例如在公开视图中显示帖子(views / posts / show.html.erb)我可以使用(为简洁起见而简化)

<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>

我希望根据您在ActiveAdmin或Devise中设置用户时使用的内容生成方法名称(如果您将用户模型命名为Vip,那么方法是 vip_signed_in?)。

答案 3 :(得分:0)

不要挑剔,但似乎两者都在同一个地方工作,只是如果没有用户登录就不会初始化current_user

以下是来自相关想法的一行内容,它来自before_filter,禁止用户编辑不属于他们的内容

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

你必须在&&上用user_signed_in?包裹整个位,否则当没有用户登录时它会崩溃。