当前位置: 首页 > 面试题库 >

如何将jquery / ajax数据用于password.js

晏修诚
2023-03-14
问题内容

如果我使用表单字段发送登录请求action="/login", method="post",则可以正常工作。类似于此处或此处提供的代码。

但是,如果相反,如果我使用来发送相同的信息jquery/ajax,则护照似乎不起作用。没有通过护照进行实际登录,但是ajax调用给出了一个误导性的成功消息

以下不起作用。尽管我收到“登录成功”消息,但登录并未真正发生。

$('#login_button').click(function () {

    var email = $('#email').val();
    var password = $('#password').val();
    alert ('email/pass:' + email + ", " + password);

    $.ajax({
        type: "POST",
        url: "/login",
        data: { email: email , password: password },
        dataType: 'html'
    })
            .done(function () {
                console.log("http request succeeded");
                alert("login success");
            });
});

我需要使用该ajax方法,以便成功登录后可以在客户端执行一些有用的操作。例如开始socket.io

请帮忙。我的修改后的代码在这里可用:my-modified-code


问题答案:

我尝试了您的代码,并且在Passport方面有效。我先进行了“本地注册”,“注销”,然后进行了“本地登录”,并成功通过了身份验证,但是在用户界面中没有任何指示。

这与您正在讨论的302有关-服务器回答302因为您已定义successRedirect : '/profile',然后jQuery遵循了重定向并接收到HTML,该HTML无法解析,因为它需要JSON。而且由于您没有.fail()$.ajax呼叫中定义回调,所以看不到它。

会话正常,但可以手动转到/profile

当您使用常规HTML表单登录时,浏览器将发送一个HTTP请求并根据响应进行操作(例如,呈现HTML页面,或者如果是302,则执行重定向)。发生相同的情况,但调用时上下文不同$.ajax-AJAX调用遵循重定向,因为它发出了请求,但浏览器没有。

您应该为AJAX和HTML登录使用单独的路由,或者使用自定义回调并根据确定返回的内容req.accepts()

分开的路线可以是例如。

// AJAX logins to this URL, redirect on client side using
// window.location.href if login succeeds
app.post('/login/ajax', passport.authenticate('local-login'));

// HTTP login form send to this URL
app.post('/login', passport.authenticate('local-login', {
  successRedirect : '/profile',
  failureRedirect : '/login',
  failureFlash : true
}));

自定义回调可能是这样的(未经测试):

app.post('/login', function(req, res, next) {
  passport.authenticate('local-login', function(err, user, info) {
    switch (req.accepts('html', 'json')) {
      case 'html':
        if (err) { return next(err); }
        if (!user) { return res.redirect('/login'); }
        req.logIn(user, function(err) {
          if (err) { return next(err); }
          return res.redirect('/profile');
        });
        break;
      case 'json':
        if (err)  { return next(err); }
        if (!user) { return res.status(401).send({"ok": false}); }
        req.logIn(user, function(err) {
          if (err) { return res.status(401).send({"ok": false}); }
          return res.send({"ok": true});
        });
        break;
      default:
        res.status(406).send();
    }
  })(req, res, next);    
});


 类似资料:
  • 问题内容: 我正在尝试使用.get()或.post()执行简单的jQuery AJAX尝试。 如果我的服务器上有本地副本,请执行以下操作: 我在Firebug的控制台中监视获取已完成,并且得到响应。 我所更改的只是到外部服务器的URI,没有任何反应。 如果我取消了’s’或使用了post,则无济于事。我是否缺少一些我应该在jQuery中使用的参数? 编辑:我忘记提及我这样做的原因是因为我最终要从一个

  • 问题内容: 我正在使用ajax发布一些数据。我想处理该数据并返回到调用jQuery脚本。 这是我的jQuery: 这是我在服务器上的somescript.php: 我在服务器端是否正确执行此操作?ajax调用完成后如何访问返回字符串? 问题答案: 我想到了。需要在PHP中使用echo而不是return。 和jQ:

  • 问题内容: 我发现了无数关于如何使用jQuery和Ajax从json文件中检索数据的教程,但是没有关于如何将 数据发布到json文件中的* 教程。 *。 如果有人可以向我展示或给我发送有关如何执行此操作的小脚本,那就太好了。我到处都在搜索如何执行此操作,但是没有运气。我见过有人这样做的例子,但他们似乎忘记了分享我没有看到的重要信息。我使用ajax检索数据json文件没有问题。如果有人可以告诉我我是

  • 问题内容: 我正在尝试使用j查询$ .ajax方法向我的php脚本发送多个数据,但是当我连接多个数据时我只能传递单个数据我的php脚本tat中出现未定义的索引错误,意味着发出了ajax请求,但没有数据发送,我需要知道如何格式化多个数据以依次将其发送到名称为vale对的处理脚本中,这是我写的 问题答案: 您可以创建一个键/值对的对象,jQuery将为您完成其余工作: 这样,数据将被自动正确编码。如果

  • 问题内容: 我总是收到“错误”警报,但我无法弄清楚出了什么问题。我只是想取回我发送的字符串(“ testexpression”)。它必须与数据部分有关,因为没有参数就可以工作。 这是jQuery部分: 这是控制器: (更新:类型为post,我也尝试使用get进行测试,然后将其留在了里面) 问题答案: 您需要将数据作为字符串/ json发送。您正在发送一个javascript对象。另外,该URL可能

  • 问题内容: 我的应用程序中的一个页面具有一组链接,这些链接在单击时会基于TableTools jQuery插件发布表单数据。我想在一个新窗口中打开这个新页面。关于最佳方法的任何想法?我宁愿不将所有操作链接都更改为单个表单和用法。我尝试过调用一个新窗口以成功打开,然后将数据写入此页面,但这没有用。请帮忙! HTML: Javascript: 问题答案: 找到了答案: jQuery.ajax成功回调函