私は 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?
あります。そうしないと、ユーザーがサインインしていないときにクラッシュします。