我正在使用带有 rails 3 的设计,我正在尝试创建一个页面,每个人都可以查看(即使是那些未注册的人),但对注册的人有额外的功能。
问题是当我调用 current_user 时没有用户,因为我没有使用身份验证!在我的控制器上过滤,因为我希望未注册的用户能够查看它。
如果他们在会话中,我如何登录用户,否则在没有用户的情况下离开它?
我正在使用带有 rails 3 的设计,我正在尝试创建一个页面,每个人都可以查看(即使是那些未注册的人),但对注册的人有额外的功能。
问题是当我调用 current_user 时没有用户,因为我没有使用身份验证!在我的控制器上过滤,因为我希望未注册的用户能够查看它。
如果他们在会话中,我如何登录用户,否则在没有用户的情况下离开它?
您可以使用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 %>
我能想到的唯一方法是每次你想调用当前用户时调用它,这可能不是最好的解决方案......所以它会像
if user_signed_in?
#code for current_user
else
#code for no current_user object
end
只是一个简短的说明。我想知道管理员用户是否已登录,如果是,请在公共视图页面上提供一些有用的链接和信息,以便管理员可以快速跳转到管理部分来编辑资源。
但是,如果您将用户生成为 AdminUser(按照 ActiveAdmin 的入门说明),那么方法user_signed_in? 和current_user是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?)。
不要吹毛求疵,但似乎两者都在同一个地方工作,只是current_user
如果没有用户登录,它就不会被初始化。
这是来自相关想法的一行代码,它来自before_filter
禁止用户编辑不属于他们的项目
user_signed_in? && (@subscription.user_id == current_user.id || current_user.admin)
你必须用一个&&
on包裹整个位user_signed_in?
,否则当没有用户登录时它会崩溃。