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 API 中有效地使用 Devise 和 Doorkeeper?