加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails-3 – 使用devise和mobile_fu登录时无法正确重定向

发布时间:2020-12-17 02:16:18 所属栏目:百科 来源:网络整理
导读:编辑:我自己解决了这个问题.如果有人有更好或更优雅的解决方案,请在此发布,我将选择作为答案. 我使用jQuery Mobile和mobile_fu为rails3应用程序设置移动视图. Devise用于身份验证,它在桌面视图中完美运行. 我的问题是,在移动视图中成功登录后,当应用程序重
编辑:我自己解决了这个问题.如果有人有更好或更优雅的解决方案,请在此发布,我将选择作为答案.

我使用jQuery Mobile和mobile_fu为rails3应用程序设置移动视图.

Devise用于身份验证,它在桌面视图中完美运行.

我的问题是,在移动视图中成功登录后,当应用程序重定向到根页面时,应用程序会再次重定向到sign_in表单.登录是正确的,如果我只是重新加载页面,那么正确地重定向到root.顺序如下:

我在移动设备中输入根页面URL
由于未对用户进行身份验证,请将重定向设计到登录页面
我输入凭据并点击登录按钮
登录正确执行,但应用程序再次重定向到登录页面
在移动设备中重新加载,然后应用程序重定向到根页面,并且用户已正确验证

我已按照此说明设置了移动设备,但使用“移动”格式而不是“iOS”格式:
https://github.com/plataformatec/devise/wiki/How-To%3a-Make-Devise-work-with-other-formats-like-mobile,-iphone-and-ipad-%28Rails-specific%29

任何帮助将不胜感激,我已经在这个问题上工作了几天,它开始让我发疯:S
提前致谢!

我在登录时附加了移动和桌面请求和响应的请求和响应数据:

Desktop login

Request

POST /users/sign_in HTTP/1.1 Host: localhost:3000 User-Agent:

Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:7.0.1) Gecko/20100101

Firefox/7.0.1 Accept:

text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8

Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding:

gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7

Connection: keep-alive Referer: 07001

Cookie:
_PMG_session=BAh7CkkiCmZsYXNoBjoGRUZJQzolQWN0aW9uRGlzcGF0Y2g6OkZsYXNoOjpGbGFzaEhhc2h7BjoKYWxlcnRJIkJOZWNlc2l0YXMgaW5pY2lhciBzZXNpw7NuIGNvbiB0dSBjdWVudGEgcGFyYSBwb2RlciBjb250aW51YXIuBjsAVAY6CkB1c2VkbzoIU2V0BjoKQGhhc2h7BjsHVEkiD3Nlc3Npb25faWQGOwBGIiViZjlkZDc4NzczMmFmMGViNjcyOWRkNzAxNWJhMzQ5YkkiEG1vYmlsZV92aWV3BjsARkZJIhN1c2VyX3JldHVybl90bwY7AEZJIgYvBjsARkkiEF9jc3JmX3Rva2VuBjsARkkiMWEyZW9oamFKT2tsWEZrbzZxc3lNenRhWTVEUk5XaHVUdm9iV3J3aFhFK1E9BjsARg%3D%3D–6623519d539757216a03d212a4e20647e8a5029c;
jstree_open=%231%2C%234%2C%235; jstree_load=

Response

HTTP/1.1 302 Found Location: 07002 Content-Type:

text/html; charset=utf-8 Cache-Control: no-cache X-UA-Compatible:

IE=Edge X-Runtime: 1.650766 Server: WEBrick/1.3.1

(Ruby/1.9.2/2011-02-18) Date: Mon,31 Oct 2011 08:58:24 GMT

Content-Length: 88 Connection: Keep-Alive Set-Cookie:
_PMG_session=BAh7CkkiCmZsYXNoBjoGRUZJQzolQWN0aW9uRGlzcGF0Y2g6OkZsYXNoOjpGbGFzaEhhc2h7BjoLbm90aWNlSSIoSGFzIGluaWNpYWRvIHNlc2nDs24gY29ycmVjdGFtZW50ZS4GOwBUBjoKQHVzZWRvOghTZXQGOgpAaGFzaHsASSIQbW9iaWxlX3ZpZXcGOwBGRkkiEF9jc3JmX3Rva2VuBjsARkkiMWEyZW9oamFKT2tsWEZrbzZxc3lNenRhWTVEUk5XaHVUdm9iV3J3aFhFK1E9BjsARkkiGXdhcmRlbi51c2VyLnVzZXIua2V5BjsAVFsISSIJVXNlcgY7AEZbBmkGSSIiJDJhJDEwJEZQL20vZ29KU2FGUFZ0bmRzb0VZeS4GOwBUSSIPc2Vzc2lvbl9pZAY7AEYiJTA1NzI5YjFjOTMyZDdlMjk3YjEwYWQ5NWU3ZDJkZjYx–889ba65c483c3757b6aa47ffc2e187ac27a04dbe;
path=/; HttpOnly

Mobile login

Request

POST /users/sign_in HTTP/1.1

Host: localhost:3000

User-Agent: Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X;
en-us) AppleWebKit/528.18 (KHTML,like Gecko) Version/4.0 Mobile/7A341
Safari/528.16

Accept: text/html,/; q=0.01

Accept-Language: es-es,en;q=0.3

Accept-Encoding: gzip,deflate

Accept-Charset: ISO-8859-1,*;q=0.7

Connection: keep-alive

Content-Type: application/x-www-form-urlencoded; charset=UTF-8

X-Requested-With: XMLHttpRequest

Referer: 07003

Content-Length: 195

Cookie: jstree_open=%231%2C%234%2C%235; jstree_load=;
_PMG_session=BAh7CkkiCmZsYXNoBjoGRUZJQzolQWN0aW9uRGlzcGF0Y2g6OkZsYXNoOjpGbGFzaEhhc2h7BjoKYWxlcnRJIkJOZWNlc2l0YXMgaW5pY2lhciBzZXNpw7NuIGNvbiB0dSBjdWVudGEgcGFyYSBwb2RlciBjb250aW51YXIuBjsAVAY6CkB1c2VkbzoIU2V0BjoKQGhhc2h7BjsHVEkiD3Nlc3Npb25faWQGOwBGIiUwMjY0ZGFkODY2MGY3YmE5ZWY4NmQzYmRmODUyNDUxOEkiEG1vYmlsZV92aWV3BjsARlRJIhN1c2VyX3JldHVybl90bwY7AEZJIgYvBjsARkkiEF9jc3JmX3Rva2VuBjsARkkiMTN5am1kaUhZcWpEZTAyclNNZ05ZNU5aZjA4bG5mamxCZHR6UmlVVHpkNFk9BjsARg%3D%3D–a6c9dbd6b27ac1b43193b4cba901b8862046dacf
Pragma: no-cache Cache-Control: no-cache

Response

HTTP/1.1 200 OK

Content-Type: text/html; charset=utf-8

Etag: “22b69d3da00b31c705b66d95aa8a32de”

Cache-Control: max-age=0,private,must-revalidate

X-UA-Compatible: IE=Edge

X-Runtime: 1.317610

Server: WEBrick/1.3.1 (Ruby/1.9.2/2011-02-18)

Date: Mon,31 Oct 2011 09:06:47 GMT

Content-Length: 2915

Connection: Keep-Alive

Set-Cookie:
_PMG_session=BAh7C0kiCmZsYXNoBjoGRUZJQzolQWN0aW9uRGlzcGF0Y2g6OkZsYXNoOjpGbGFzaEhhc2h7BjoLbm90aWNlSSIoSGFzIGluaWNpYWRvIHNlc2nDs24gY29ycmVjdGFtZW50ZS4GOwBUBjoKQHVzZWRvOghTZXQGOgpAaGFzaHsASSIQbW9iaWxlX3ZpZXcGOwBGVEkiEF9jc3JmX3Rva2VuBjsARkkiMTN5am1kaUhZcWpEZTAyclNNZ05ZNU5aZjA4bG5mamxCZHR6UmlVVHpkNFk9BjsARkkiCWxpbmUGOwBGSSIGNQY7AFRJIhl3YXJkZW4udXNlci51c2VyLmtleQY7AFRbCEkiCVVzZXIGOwBGWwZpBkkiIiQyYSQxMCRGUC9tL2dvSlNhRlBWdG5kc29FWXkuBjsAVEkiD3Nlc3Npb25faWQGOwBGIiVhYWNkYzNlNjNhODU2ZWVjNmY1YmYzODEwNTk3NDA5Zg%3D%3D–31e22835ee0e428f80e0cf3f3ce5bd9fc8134d20;
path=/; HttpOnly

解决方法

我设法解决了这个问题.也许我之前应该问过让灵感运行:)

显然,当请求格式不是HTML时,Devise无法正确重定向.不幸的是,我依靠这种格式为使用mobile_fu的移动设备提供不同的模板,而forcing the request format as devise wiki suggested为了让它能够使用jquery mobile正常运行.

我发现的解决方案是一个丑陋的解决方案:
当用户向设计控制器发出POST请求时 – 当尝试进行身份验证时 – 我强制使用html格式而不是移动格式.这样Devise就能正确地进行重定向.

ApplicationController类的代码:

before_filter :set_mobile_format

def set_request_format
  if is_mobile_device? # this method is provided by mobile_fu
    if (devise_controller? && action_name == 'create' && request.method == ('POST'))
      request.format = :html
    else
      request.format = :mobile
    end
  end
end

希望这可以帮助遇到同样问题的任何人.

欢迎更优雅的解决方案!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读