如何在 Appcelerator 的表单中设置 CSRF?

How can I set CSRF in a form in Appcelerator?

我正在创建一个有登录名的应用程序。我希望该登录名与用户名和密码相匹配,但我无法做到这一点,因为我无法发送“_token”字段,而且我不能生成应用程序将等待的相同令牌。

这是我当前的表格:

<View id="loginView" layout="vertical">
        <TextField id="inputUsername" />
        <TextField id="inputPassword" passwordMask="true" />
        <Button id="buttonLogin" onClick="performLogin" /> 
        <ActivityIndicator id="activityIndicator" />
    </View>

这是我当前在 Appcelerator 上的登录请求。

loginReq.open("POST","http://192.168.100.29/miapp/mobile/auth/login");
    var params = {
        username: $.inputUsername.value,
        password: $.inputPassword.value
    };
    loginReq.send(params);

它应该是这样的:

loginReq.open("POST","http://192.168.100.29/miapp/mobile/auth/login");
    var params = {
        username: $.inputUsername.value,
        password: $.inputPassword.value,
        _token: $.inputTokenOrSomething.value
    };
    loginReq.send(params);

另外我在Laravel中的routes.php文件中创建了一个路由,如下:

Route::get("mobile/auth/login", function(){

    echo ("Debug"); exit;

});

有人有想法吗?谢谢。

通常您希望通过请求 Header 发送 CSRF 令牌。这是在向 Drupal 发送令牌时使用 Appcelerator 完成的方式:

loginReq.open("POST","URL"); 
loginReq.setRequestHeader('X-CSRF-Token',TOKENHERE);
loginReq.send(params);

请注意,您的请求 Header 在打开之后发送,但在发送之前发送。

编辑:

忘记添加 - 通常您发送不带令牌的登录,然后在成功登录后从服务器响应中捕获令牌(通常作为 XML、JSON 等发送。 .. 取决于设置)。每当您需要对自己进行身份验证以执行操作(如发布、删除内容)时,都会在请求 headers 中存储和发送此令牌。同样,这一切都取决于设置。