【问题标题】:Rails 4.2 / Devise - Display specific message to users if cookies are disabledRails 4.2 / Devise - 如果禁用 cookie,则向用户显示特定消息
【发布时间】:2018-06-03 14:12:41
【问题描述】:

在我的 ruby​​ on rails 4.2 应用程序中,我使用 Devise 对用户进行身份验证(登录和注册)。举个例子:例如,当用户注册时,他会以登录用户的身份自动重定向到主页。

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

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

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

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

注意:顺便说一下,这是 Google 使用的策略,即使对他们来说它是分两步进行的。

【问题讨论】:

  • 看看这是否有帮助:stackoverflow.com/questions/531393/…
  • 谢谢,但是您提供的 SO 链接实际上是通用的 http-request 和 javascript。我的问题是如何在 Rails 框架和 Devise 的上下文中处理这个问题。

标签: ruby-on-rails ruby ruby-on-rails-4 devise


【解决方案1】:

我还没有找到在 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 时才有效!

【讨论】:

  • 我很高兴能帮上忙 :)
猜你喜欢
  • 1970-01-01
  • 2013-05-22
  • 1970-01-01
  • 2018-10-12
  • 1970-01-01
  • 1970-01-01
  • 2021-11-29
  • 2012-12-19
  • 1970-01-01
相关资源
最近更新 更多