在一个单独的网站上使用ajax登录Rails 3应用程序(使用设计进行身份验证)



那么,我有一个rails 3应用程序使用设计来处理身份验证。我有另一个网站(所有客户端javascript),正试图登录到这个rails 3应用程序使用ajax基本身份验证,像这样:

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数据),我得到一个丑陋的基本auth javascript弹出告诉我我需要身份验证。

设计显然不使用cookie来存储验证数据,从我的理解,你不能只是从javascript访问HttpSession…我能做什么,或者我只需要使用身份验证令牌(并编写一个自定义控制器来返回这个给我)。

编辑:

即使是具有基本权限的帖子也不起作用,这很奇怪(因为回想起来,是的,这是我试图达到的帖子路线)。我得到一个401未经验证的错误…为什么您需要经过身份验证才能进行身份验证?让type be 'GET '工作得很好,虽然,但是(再一次,回想起来)击中了'new'路线而不是'create'。

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
});

编辑:只是为了确认,它似乎不是一个问题与应用程序控制器中的"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
});

首先进行设置。

/config/初始化/devise.rb设置配置。Http_authenticatable = true这将允许您通过HTTP进行身份验证设置配置。http_authenticatable_on_xhr = true(默认为true)

现在重启

现在for Sign_in:

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

And Sign out:

$.ajax({
  'url': '/providers/sign_out',
  'type': 'DELETE',
  'otherSettings': 'othervalues',
  sucess: function(result) {
   alert('done');
  }
});

相关内容

  • 没有找到相关文章

最新更新