GSt*_*Sto 58 ruby-on-rails ruby-on-rails-plugins devise
我最近在rails应用程序上安装了Devise,我想知道是否有可能在其中一个模型或控制器中获取当前登录用户的实例,如果是这样,我该怎么做?
Sco*_*ott 118
Devise动态创建代表当前登录用户的便捷方法.
但是,您应该注意,生成的方法名称包括用户模型的类名.例如,如果您的Devise模型被称为' User',则可以使用' current_user' 访问当前登录的用户,如果您的Devise类是' Admin',则可以使用' current_admin' 访问登录的管理员用户.
有许多其他方法使用类似的约定创建,例如' user_signed_in?'或'again' admin_signed_in?',这些非常好.
这些方法在控制器和视图中可用,因此您可能在视图中具有以下内容:
<% if user_signed_in? %>
<div>Signed in as... <%= current_user.email %></div>
<% end %>
Run Code Online (Sandbox Code Playgroud)
最后,如果您在应用程序中使用两个或更多Devise模型(例如User和Admin),您可以使用' anybody_signed_in?'方便方法检查这些类型的用户是否已登录:
<% if anybody_signed_in? %>
<h2>Special offers</h2>
<p>All registered users will receive free monkeys!</p>
<% end %>
Run Code Online (Sandbox Code Playgroud)
更新:
自Devise版本1.2.0起,' anybody_signed_in?'已被弃用并被' signed_in?' 取代
Joh*_*ohn 15
Devise辅助方法仅在控制器和视图层可用.它们在模型层不可用(请参阅README的 Controller过滤器和帮助程序部分).
Is it possible to get the currently logged in user from within a model?. 通过Devise为您创建的默认帮助程序方法是不可能的.但是,您可以使用许多替代方法来提供current_user模型.Alex Bartlow已经提出了最简单的方法,那就是简单地将current_user一个方法传递给你的模型.
Is it possible to get the currently logged in user from within a controllers? 对的,这是可能的.使用current_<modelname>,<modelname>具有Devise身份验证功能的模型的名称(即via rails g devise <modelname>).例如,如果您的模型是User,那么您将使用current_user.如果您的模型是Elmo,那么您将使用current_elmo.
| 归档时间: |
|
| 查看次数: |
72875 次 |
| 最近记录: |