Rails 4.2 / Devise - 如果禁用cookie,则向用户显示特定消息

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rails 4.2 / Devise - 如果禁用cookie,则向用户显示特定消息相关的知识,希望对你有一定的参考价值。

在我的ruby on rails 4.2 app上,我正在使用Devise来验证(登录和注册)用户。让我们举一个例子:例如,当用户注册时,他会自动重定向到主页作为登录用户。

我需要提供阻止或停用cookie(和其他Web存储)的用户的情况。

今天,如果是这种情况并且cookie被阻止,当他在我的注册页面上注册时,他仍然会被重定向到主页,但他不会被登录:设计无法正常工作。

Rails如何识别服务器端的cookie被禁用,这样我就可以在提交注册/表格后向用户显示一条好消息,例如“请激活cookie继续”。

我想要一个与Devise很好地集成的干净解决方案(与一些需要从javascript传递到服务器的前端检测,看起来像是一个“脏”黑客:-)。

注意:这是Google使用的策略,即使对于它们,它也是以两步形式进行的。

答案

我还没有找到在rails中执行此操作的方法,但有一种简单的方法可以使用JS。您可以使用Javascript来完成此任务。

图书馆:

# make sure to incclude this file in app/assets/javascripts/application.js.coffee
#app/assets/javascripts/cookie.js.coffee
createCookie = (name, value, days) ->
  expires = undefined
  if days
    date = new Date
    date.setTime date.getTime() + days * 24 * 60 * 60 * 1000
    expires = '; expires=' + date.toGMTString()
  else
    expires = ''
  document.cookie = name + '=' + value + expires + '; path=/'
  return

readCookie = (name) ->
  nameEQ = name + '='
  ca = document.cookie.split(';')
  i = 0
  while i < ca.length
    c = ca[i]
    while c.charAt(0) == ' '
      c = c.substring(1, c.length)
    if c.indexOf(nameEQ) == 0
      return c.substring(nameEQ.length, c.length)
    i++
  null

eraseCookie = (name) ->
  createCookie name, '', -1
  return

areCookiesEnabled = ->
  r = false
  createCookie 'testing', 'Hello', 1
  if readCookie('testing') != null
    r = true
    eraseCookie 'testing'
  r

要运行的代码:

alert(areCookiesEnabled());

这只适用于启用Javascript的情况!

以上是关于Rails 4.2 / Devise - 如果禁用cookie,则向用户显示特定消息的主要内容,如果未能解决你的问题,请参考以下文章

Rails6 禁用所有非 ActiveAdmin 页面的 ActiveAdmin 布局

Rails Devise:获取当前登录用户的对象?

如何在我的 rails API 中有效地使用 Devise 和 Doorkeeper?

Devise for Rails中的唯一用户名

防止在rails / devise中没有邀请代码的情况下登录

Rails:如何在 Rails 中为 Devise 设置密钥?