2012-04-20 42 views
14

我有一个使用devise进行认证的rails 3应用程序,并且想要使用javascript来查看用户是否已登录。最好的方法是什么?使用javascript来检查是否用设计登录

+0

请添加更多细节以获得更好的建议 – ControlAltDel 2012-04-20 15:45:43

+0

可能需要进一步的细节?我在我的应用程序中使用设计进行身份验证,并想知道如何检查用户是否使用JavaScript进行身份验证? – Solomon 2012-04-20 16:03:04

+0

@Solomon:我不知道Rails是如何工作的,但您可以检查cookie(PHP)或隐藏输入(ASP.NET)以查看会话ID。 – 2012-04-20 16:51:51

回答

15

由于设计是基于监狱长,你可以使用看守的回调来设置附加Cookie,将来自JS可见的(不像服务器唯一会话cookie)在您的devise.rb,如:

Warden::Manager.after_set_user do |user,auth,opts| 
    auth.cookies[:signed_in] = 1 
    end 

    Warden::Manager.before_logout do |user,auth,opts| 
    auth.cookies.delete :signed_in 
    end 
+1

它是否适用于Rails 4? – SsouLlesS 2015-12-24 15:42:04

+1

@SsouLlesS差不多。我不得不改变删除行(出于某种原因,'cookies.delete'没有从浏览器中删除cookie,我在注销时将'0'作为'value'和'expire'分配给'Time.now'。 – 2016-05-17 16:59:21

-2

它看起来像Rails在cookies客户端存储会话。

我会在您登录时检查应用程序中的Cookie(console.log(document.cookies)),并在退出时查看有没有

这样,您将很容易地看到如何检查您是否连接到客户端。

+0

这是我检查document.cookie时所得到的结果,如果它已登录或注销,则有所作为:__utma = 111872281.2045911381.1309470856.1334590129.1334935149.157; __utmz = 111872281.1309470856.1.1.utmcsr =(直接)| utmccn =(直接)| utmcmd =(无); __utmc = 111872281 – Solomon 2012-04-20 19:47:39

+1

设计饼干是HttpOnly,这意味着你不能从JavaScript读取它们。为了这个工作,我认为你需要设置你自己的cookie。 – Steve 2012-11-30 04:34:09