javascript - 在单独的网站上使用 ajax 登录 Rails 3 应用程序(使用 Devise 进行身份验证)

标签 javascript ajax ruby-on-rails-3 devise

因此,我有一个使用 Devise 处理身份验证的 Rails 3 应用程序。我有另一个网站(所有客户端 javascript)正在尝试使用 ajax 基本身份验证登录此 Rails 3 应用程序,如下所示:

username = "test@testing.com"
password = "testing"
$.ajax({
  'url': '/users/sign_in',
  'otherSettings': 'othervalues',
  'beforeSend': function(xhr) {
    xhr.setRequestHeader("Authorization", "Basic  " + btoa(username + ":" + password))
  },
  sucess: function(result) {
   alert('done');
  }//sicc
});

它正确地命中了路线,我可以看到在 rails 端一切看起来都很好(服务器甚至认为它正在重定向),但是如果我然后尝试命中一条路线(使用 jquery,加载 json 数据)需要身份验证,我得到那个丑陋的基本身份验证 javascript 弹出告诉我我需要身份验证。

Devise 显然不使用 cookie 来存储身份验证数据,据我了解,您不能只从 javascript 访问 HttpSession ...我能做些什么吗,或者我只需要使用身份验证 token (和编写一个自定义 Controller 将其返回给我)。

编辑:

即使是具有基本身份验证的帖子也不起作用,这很奇怪(因为回想起来,是的,这是我试图到达的帖子路线)。我收到 401 Unauthenticated 错误...为什么您需要经过身份验证才能进行身份验证?不过,将类型设置为“GET”效果很好,但(再次回想起来)正在触及"new"路线而不是“创建”路线。

username = "test@testing.com"
password = "testing"
$.ajax({
  'url': '/users/sign_in',
  'type': 'POST',
  'otherSettings': 'othervalues',
  'beforeSend': function(xhr) {
    xhr.setRequestHeader("Authorization", "Basic  " + btoa(username + ":" + password))
  },
  sucess: function(result) {
   alert('done');
  }//sicc
});

编辑:只是为了确认,应用程序 Controller 中的“protect_from_forgery”行似乎也不是问题……至少,当我将其注释掉时,我仍然遇到同样的问题。

没关系,问题似乎是当我使用基本身份验证发帖时,我在用户名中输入错误,显然处理身份验证失败的方式是弹出基本身份验证对话框(非常不优雅,顺便说一句)

解决方案:

username = "test@testing.com"
password = "testing"
$.ajax({
  'url': '/users/sign_in',
  'type': 'POST',
  'otherSettings': 'othervalues',
  'beforeSend': function(xhr) {
    xhr.setRequestHeader("Authorization", "Basic  " + btoa(username + ":" + password))
  },
  sucess: function(result) {
   alert('done');
  }//sicc
});

最佳答案

有什么原因不能在 POST 数据中发送用户名和密码吗?

var username = "test@testing.com";
var password = "testing";

$.ajax({
    url: '/users/sign_in',
    type: 'post',
    data: 'username=' + username + '&password=' + password
    success: function(result) {
      alert('done');
    }//sicc
});

关于javascript - 在单独的网站上使用 ajax 登录 Rails 3 应用程序(使用 Devise 进行身份验证),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5780385/

相关文章:

javascript - 在 Javascript ES6 map 中获取或设置元素?

javascript - 新类jquery无法找到最近添加的类的元素

javascript - 加载()div中的内容并在内容div中添加div

jquery - 多个 $http.get 调用必须更新行

ruby-on-rails - 路由错误 No route matches [GET] "/static_pages/home", tutorial

javascript - 为什么我不能在 settimeout/setinterval 中多次调用带参数的函数

javascript - 如何编写一个可以执行字符串操作的 javascript 插件(如 jQuery)

javascript - 无法在ajax响应中获取数据id以解析为模态

ruby-on-rails - 使用 <%= will_paginate %> 更改每页的元素数

ruby-on-rails - Rails 3-通过paper_clip了解attr_accessible