我正在使用rails 3设计,我正在尝试创建一个可供所有人查看的页面(即使是那些未注册的页面),但还为已注册的人员提供了附加功能。
问题是当我调用current_user时没有用户,因为我没有使用身份验证!在我的控制器上过滤,因为我希望未注册的用户能够查看它。
如果用户在会话中,如何在没有用户的情况下离开用户,我该如何登录?
答案 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?
包裹整个位,否则当没有用户登录时它会崩溃。