Я хочу отправить заявку на сообщение из игры единства в контроллер laravel 5.4 .. в html-форме мы используем {{csrf_field}} и обрабатываем создание токена. но как я могу сделать это в единстве?Создайте токен в единстве, чтобы отправить запрос на запрос к контроллеру laravel.
ответ
Вы можете использовать WWWForm послать в POST и вызвать его из сопрограммы:
// this will send it at start
// but you can just call SendToController in another function
string laravel_url = "http://somedomain.com/whatever";
IEnumerator Start() {
yield return StartCoroutine(SendToController());
}
IEnumerator SendToController()
{
WWWForm form = new WWWForm();
form.AddField("csrf_field", "replace this with what you want!!!!");
WWW download = new WWW(laravel_url, form);
yield return download;
if(!string.IsNullOrEmpty(download.error)) {
print("Error downloading: " + download.error);
} else {
// if succesful, do what you want
Debug.Log(download.text);
}
}
«сопрограммная» является вашим другом. Это упростит отправку форм. Вы можете прочитать об этом здесь: https://docs.unity3d.com/ScriptReference/MonoBehaviour.StartCoroutine.html
Laravel будет генерировать токен каждый раз, когда создается страница. Токен имеет пожизненную жизнь, и после этой жизни он больше не может использоваться (вот и все).
Вам необходимо получить действительный токен от Laravel, перейдя его в Unity3D, а затем, когда из Unity создайте WWWForm и передайте его обратно.
Как это сделать, это зависит от платформы, на которой развертывается Unity3D. Если вы используете WebPlayer или WebGL, тогда вы можете получить свою руку от Unity3D, протестированного в браузере, и использовать SendMessage. Ссылка WebGL here.
Если игра развернута на другой платформе, вероятно, имеет смысл разоблачить и API на стороне Laravel и использовать эту конечную точку вместо выполнения запроса POST.
tnx для вашего описания о токенах. это будет для android и ios .. Я думаю, вы имеете в виду, что я делаю это по запросу GET. Конечно, он работает с GET. Я попробовал POST из-за его большей безопасности. кстати, я получил токен от запроса GET и привязал его к wwwform. но происходит то же самое несоответствие! потому что, как вы упомянули, токен генерируется по мере поступления каждого запроса ... –
вам придется дублировать много действий браузера, чтобы сделать эту работу, по крайней мере, хранить и отправлять файлы cookie, чтобы вы преодолели защиту csrf. Вероятно, это то, чего вы не хотите делать, поэтому я предлагал использовать конечную точку API или делать запрос GET, если это достаточно хорошо. –
большое спасибо. Я сделал это ПОЛУЧИТЬ, и он работает хорошо. Я использовал имя хранилища ключей и привязал его к URL-адресу в качестве параметра. Я проверяю его на стороне сервера, чтобы равняться хранилищу ключей (который я жестко закодирован на стороне сервера). Я надеюсь, что это будет похоже на csrf_token !! потому что если apk взломан, хранилище ключей не будет показано! Я думаю, он создается во время выполнения. –
проблема в том, что токен .. Я попробовал то, что вы сказали .. снова возникает ошибка несоответствия токенов! –
Привет, могу ли я увидеть код, чтобы проверить, что вы отправляете? – frost
WWWForm form = new WWWForm(); form.AddField ("device_id", SystemInfo.deviceUniqueIdentifier); form.AddField («имя», имя); form.AddField («оценка», оценка); form.AddField ("_token", "adjvajvsfv"); WWW www = new WWW (addScoreURL, форма); –