2017-02-16 9 views
0

Я хочу отправить заявку на сообщение из игры единства в контроллер laravel 5.4 .. в html-форме мы используем {{csrf_field}} и обрабатываем создание токена. но как я могу сделать это в единстве?Создайте токен в единстве, чтобы отправить запрос на запрос к контроллеру laravel.

ответ

0

Вы можете использовать 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

+0

проблема в том, что токен .. Я попробовал то, что вы сказали .. снова возникает ошибка несоответствия токенов! –

+0

Привет, могу ли я увидеть код, чтобы проверить, что вы отправляете? – frost

+0

WWWForm form = new WWWForm(); form.AddField ("device_id", SystemInfo.deviceUniqueIdentifier); form.AddField («имя», имя); form.AddField («оценка», оценка); form.AddField ("_token", "adjvajvsfv"); WWW www = new WWW (addScoreURL, форма); –

0

Laravel будет генерировать токен каждый раз, когда создается страница. Токен имеет пожизненную жизнь, и после этой жизни он больше не может использоваться (вот и все).

Вам необходимо получить действительный токен от Laravel, перейдя его в Unity3D, а затем, когда из Unity создайте WWWForm и передайте его обратно.

Как это сделать, это зависит от платформы, на которой развертывается Unity3D. Если вы используете WebPlayer или WebGL, тогда вы можете получить свою руку от Unity3D, протестированного в браузере, и использовать SendMessage. Ссылка WebGL here.

Если игра развернута на другой платформе, вероятно, имеет смысл разоблачить и API на стороне Laravel и использовать эту конечную точку вместо выполнения запроса POST.

+0

tnx для вашего описания о токенах. это будет для android и ios .. Я думаю, вы имеете в виду, что я делаю это по запросу GET. Конечно, он работает с GET. Я попробовал POST из-за его большей безопасности. кстати, я получил токен от запроса GET и привязал его к wwwform. но происходит то же самое несоответствие! потому что, как вы упомянули, токен генерируется по мере поступления каждого запроса ... –

+0

вам придется дублировать много действий браузера, чтобы сделать эту работу, по крайней мере, хранить и отправлять файлы cookie, чтобы вы преодолели защиту csrf. Вероятно, это то, чего вы не хотите делать, поэтому я предлагал использовать конечную точку API или делать запрос GET, если это достаточно хорошо. –

+0

большое спасибо. Я сделал это ПОЛУЧИТЬ, и он работает хорошо. Я использовал имя хранилища ключей и привязал его к URL-адресу в качестве параметра. Я проверяю его на стороне сервера, чтобы равняться хранилищу ключей (который я жестко закодирован на стороне сервера). Я надеюсь, что это будет похоже на csrf_token !! потому что если apk взломан, хранилище ключей не будет показано! Я думаю, он создается во время выполнения. –