【问题标题】:parse.com Javascript CORS error updating username (works parse side)parse.com Javascript CORS 错误更新用户名(工程解析端)
【发布时间】:2015-11-06 19:21:38
【问题描述】:

我正在使用 Parse 构建一个演示站点,它使用户能够注册(用户、密码、电子邮件)、登录然后使用 Parse.com 作为我的后端来更改这些凭据。

我已经解决了注册和登录问题,但现在在编辑用户时遇到了麻烦。

这是我到目前为止所做的:

(假设注册和登录工作正常,一切正常 写入用户中的默认(用户、密码、电子邮件)列 类)

HTML

<h1>User Edit</h1>
<form id="user-edit-form"></form>

JS 函数 1 - 将 PARSE.COM 中的现有内容输入到用户编辑表单 DIV

function areYouLoggedIn1() {
    if (Parse.User.current()) {


    function userdets() {

        var username = Parse.User.current().get("username");
        var password = Parse.User.current().get("password");
        var email = Parse.User.current().get("email");
        var output = "";

        if (Parse.User.current().get("email")) {
            email = email;
            } else {
                email = "placeholder='Add your email address'";
        }

        output += "<h3>S1</h3>";
        output += "<p>Username: ";
        output += "<input id='user-edit-form-username' type='text' value='"+username+"'>";              
        output += "</p>";
        output += "<p>Password coming soon...</p> ";
        output += "<p>Email: ";
        output += "<input id='user-edit-form-email' type='email' value='"+email+"'>";
        output += "</p>";
        output += "<p><input id='login-submit' type='submit'></p>";

        $("#user-edit-form").html(output);
    };

    userdets();

    } else {
    var output = "";
    output += "<p>You're not logged in!</p>";

    output += "<p>Do so by <a href='login.html'>clicking here to login!</a>  Alternatively you can sign up for an account by <a href='signup.html'>clicking here to sign up</a>.<p/>"

    console.log(output);

    }
$("#user-edit-form").html(output);  
};

areYouLoggedIn1();

这可以正常工作并加载现有的用户名、密码和电子邮件地址(如果存在)...


假设我现在去并更改说电子邮件(由于上述原因已预先填写),我现在运行以下命令:

JS 功能 2 - 用户更新

    $("#user-edit-form").submit(function(event){
    var user = Parse.User.current();
    var username = $("#user-edit-form-username").val();
    user.setUsername(username);
    user.save(null, {
    success: function(user) {
    alert("Just updated "+user);
    }
    });
});

在控制台日志中,我得到一个返回:

跨域请求被阻止:同源策略不允许读取 远程资源在 https://api.parse.com/1/classes/_User/UsernameRemovedByMrT。 (原因:CORS 请求失败)。

我一直在研究 CORS,但我不知道如何在我的 JS 查询中设置它。

据我了解,消息并不总是与 CORS 直接相关:Firefox CORS request giving 'Cross-Origin Request Blocked' despite headers

我是这片树林里的学习驾驶者......

我尝试过直接在 html 中编写表单,也尝试只更新用户名,但似乎没有任何效果,而且消息很难调试。

它似乎确实更新了数据库中的用户名字段,但不是在应用程序中(即使在手动刷新之后)。我假设我必须以某种方式刷新 Parse.user.current,但不确定如何最好地进行(或是否有更好的修复)?

【问题讨论】:

  • 再深入一点,我想知道我是否需要强制用户注销并重新登录?另一个观察结果是警报消息不起作用(可能是因为查询没有成功返回)?

标签: javascript jquery parse-platform cors


【解决方案1】:

更新用户详细信息有效,但由于当前用户的会话在更新时到期,您需要确保该用户再次登录。

另外,要设置用户名值,您需要 user.set("username", newUserName)。

我将回答这个问题只是为了更新用户名。您可以根据您的要求进行更改。 这是我如何更新登录用户的用户名的代码。

$("#user-edit-form").submit(function(event){
    var newUserName = $("#user-edit-form-username").val();
    var password = $("#user-edit-form-password").val();
    if (Parse.User.current()) {
        var currentUser = Parse.User.current();
        // update value when not same username
        if (newUserName !== currentUser.get("username")) {
            currentUser.set("username", newUserName);
            currentUser.save();
            // timeout for completing network request
            setTimeout(function(){
                Parse.User.logOut();
                Parse.User.logIn(NewUserName, password, {
                    success: function(user){
                        alert("username updated successfully.");
                        console.log(user);
                    },
                    error: function(error){
                        console.log(error);
                    }
                });
            }, 250);
        }
    } else {
        console.log("User not logged in.");
    }
}

【讨论】:

  • 谢谢。它仍然不适用于 Parse,但是我现在从一位朋友那里了解到,这是 Parse 库的问题,而不是 js 的问题
  • 怎么还是不行?我的意思是你有没有试过并有任何错误?
  • 如果我将 var newUserName = $("#user-edit-form-username").val(); 更改为 var newUserName = testname; 它会将用户重命名为 Parse.com 中的 testname,但它不会使用新的登录信息刷新页面,而是恢复为原始用户名显示在output += "&lt;input id='user-edit-form-username' type='text' value='"+username+"'&gt;"; 中。如果我按照您的建议使用代码,它不会改变浏览器和数据库中的用户名。
  • 那里可以访问变量 testname 吗?你是如何刷新页面的?
  • 对不起,有一个小错误,我直接声明了“testname”,这将数据库更改为测试名称。无论哪种方式,我都没有得到控制台读数(我想我应该得到三个控制台日志之一。这是函数的完整摘录:
猜你喜欢
  • 1970-01-01
  • 2014-09-13
  • 2016-06-21
  • 2021-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多