我尝试将gem simple_discussion集成到Rails应用程序上。我不使用Devise进行身份验证,而是使用Sorcery和Cancancan。
我认为方法' user_signed_in?'是一个Devise方法,是否有可能使用Sorcery从Scratch编写这个方法?
我知道方法' logged_in?'可以在Sorcery文档的视图中找到,我可以尝试制作方法' user_signed_in?'等于方法' logged_in?' ??
这些是Devise和for Sorcery的方法:
#signed_in?(scope = nil) ⇒ Boolean
如果给定范围在会话中签名,则返回true。如果没有给出作用域,则在任何作用域登录时返回true。这将运行认证挂钩,这可能导致从此方法抛出异常;如果您只是想在不运行身份验证挂钩的情况下检查作用域是否先前已经过身份验证,则可以直接调用warden.authenticated?(scope: scope)
返回:(布尔)
`# File 'lib/devise/controllers/sign_in_out.rb', line 13
def signed_in?(scope=nil)
[scope || Devise.mappings.keys].flatten.any? do |_scope|
warden.authenticate?(scope: _scope)
end
end`
#logged_in? ⇒ Boolean
显示用户是否已登录,但如果用户在线则无法显示 - 请参阅在线?
返回:(布尔)
`# File 'lib/sorcery/model/submodules/activity_logging.rb', line 60
def logged_in?
return false if self.send(sorcery_config.last_login_at_attribute_name).nil?
return true if self.send(sorcery_config.last_login_at_attribute_name).present? and self.send(sorcery_config.last_logout_at_attribute_name).nil?
self.send(sorcery_config.last_login_at_attribute_name) > self.send(sorcery_config.last_logout_at_attribute_name)
end`
我对如何做到这一点有很多疑问。