c# - 来自 Unity WWW 的 Laravel 5 登录 401 请求未经授权的 JWT(在浏览器和 Postman 中工作)

标签 c# laravel unity3d laravel-5 jwt

更新:在底部

注意事项:

  • 智威汤逊认证
  • Nginx
  • 拉拉维尔 5
  • Unity(请求失败)
  • postman :工作。
  • Chrome:有效。

我做了很多搜索试图找到这个问题的答案但无济于事。

我正在尝试统一创建一个脚本,用于登录我的 Laravel 应用程序并返回授权 token ,以便我可以使用它来发出 API 请求。 token 已正确返回。

C#代码:

private IEnumerator SendLogin(string user, string pass, Action<bool, string> callback)
{
    // Build login Submission form.
    WWWForm formData = new WWWForm();
    formData.AddField("email", user);
    formData.AddField("password", pass);
    formData.AddField("_token", "W4d7JugbWRg4ZASe4qAPinJVgg35OeaYStgeE7dm");

    // Checking Username and password were read correctly (they are)
    Debug.Log("Username: " + user + " Password: " + pass);

    // Create Request
    WWW www = new WWW(loginServerUrl, formData);
    Debug.Log("Sending Login Info To Server.");

    // Wait for request to finish
    yield return www;

    // just incase?
    while (!www.isDone)
    {
        yield return new WaitForSecondsRealtime(0.15f);
        Debug.Log("Waiting for download to finish.");
    }

    // Check for errors
    if (www.error != null)
    {
        foreach (KeyValuePair<string, string> header in www.responseHeaders)
        {
            Debug.Log(header.Key.ToString() + " Value: " + header.Value.ToString());
        }
        Debug.Log("Error On Request. To string:" + www.error.ToString());
        StopCoroutine(login_coroutine);
    }

    // Get Response
    string response = www.text;
    Debug.Log(response);

    // Parse JSON
    var json = JSON.Parse(www.text);
    Debug.Log("Json: " + json.ToString());
    Debug.Log("Response: " + response);


    if (callback != null)
    {
        callback(true, response);
    }
    StopCoroutine(login_coroutine);
}

Chrome 屏幕截图: before after login pressed

postman 截图: postman

Unity 屏幕截图(包括控制台日志): console log (URL 不同,我在/login 上得到相同的结果)

编辑: 我编辑了登录 Controller 以返回输入的电子邮件和密码作为响应,我得到了一些有趣的结果。
我还检查了访问日志,发现有一种奇怪的关联。 “\u200b”被添加到用户名和密码的末尾。

日志: 192.168.178.80 - - [02/Feb/2018:11:03:47 +0000] "POST/login HTTP/1.1"401 12 "-""UnityPlayer/2018.1.0b4 (UnityWebRequest/1.0, libcurl/7.51.0-开发)""-" 192.168.178.80 - - [02/Feb/2018:12:55:33 +0000] "POST/login HTTP/1.1"200 361 "-""Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ( KHTML,像 Gecko) Chrome/63.0.3239.132 Safari/537.36""-"

postman : console log

团结: console log

最佳答案

Unity 在用户名和密码末尾添加了零宽度空格。 (用 .TrimEnd('\u200b') 修剪它们)

WWWForm formData = new WWWForm();
formData.AddField("email", user.TrimEnd('\u200b'));
formData.AddField("password", pass.TrimEnd('\u200b'));
formData.AddField("_token", {{YOUR TOKEN}});

关于c# - 来自 Unity WWW 的 Laravel 5 登录 401 请求未经授权的 JWT(在浏览器和 Postman 中工作),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48581433/

相关文章:

C# String[] 到 byte[][]

c# - 如何在运行时查找 C# .NET 集成测试内部的物理路径?

c# - 在不同机器上运行 .NET 应用程序

php - 如何在中间件 Laravel 5 中捕获 "too many attempt"异常

php - 将变量从 Controller 传递到 View - Laravel

c# - 随机移动物体而不在墙内 - Unity 5

c# - DataGridView 自动调整和填充

c# - 可重用的 Linq to XML 方法来过滤我的查询结果

php - Laravel 未知列 'updated_at'

c# - Unity中的Encog dll?