Перенаправление контроллера Ruby on Rails не происходит при работающем WEBGL - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть WEBGL-плеер, встроенный в статическую страницу рельсов, как 'demo_path', как показано ниже:

<% provide(:title, 'Sign up') %>
<h1>Sign up</h1>

<div class="row">
<div class="col-md-6 col-md-offset-3">
<%= form_for(@user, url: signup_path) do |f| %>
  <%= render 'shared/error_messages' %>

  <%= link_to "mindpass", demo_path, class: "btn btn-lg btn-primary" 
%>

  <%= f.submit "Create my account", class: "btn btn-primary" %>
<% end %>
</div>
</div>

Когда пользователь нажимает кнопку, он загружает шаблон webgl:

<!DOCTYPE html>
<html lang="en-us">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="Content-Type" content="text/html; charset=utf- 
8">
<title>Unity WebGL Player | MindPass_DEMO</title>
<script src="Build/UnityLoader.js"></script>
<script>
  var gameInstance = UnityLoader.instantiate("gameContainer", 
"/assets/Build/MindPass_WEBGL_RY2.json");
</script>
</head>
<body>
<div id="gameContainer" style="width: 90%; height: 90%; position: 
absolute; margin: auto;"></div>
  </body>
</html>

Это успешно загружается и фактически запускает контроллер пользователей для сохранения нового пользователя и инициирует 'redirect_to @users', как показано в следующем коде users_controller:

def create
    puts "create runs"
    #puts params.inspect
    @user = User.new(user_params)
    if @user.save

      puts "user save runs"
      log_in @user
      puts "second welcome to your vault(users_cont)"
      flash[:success] = "Welcome to your vault!"
      redirect_to @user
    else
      puts "render new runs"
      render 'new'
    end
  end

Проблема в том, что перенаправление на самом деле не происходит. Вот журнал попытки, включая перенаправление:

2018-11-07T05: 04: 21.897020 + 00:00 приложение [web.1]: I,

[2018-11-07T05: 04: 21.896891 # 20] ИНФОРМАЦИЯ -: [c5de6e8e-58e2-4177-ae17-e1f58fbb65ee] Началось POST "/ регистрация" для 76.120.71.73 в 2018-11-07 05:04:21 +0000 2018-11-07T05: 04: 21.898131 + 00: 00 app [web.1]: I,

[2018-11-07T05: 04: 21.898049 # 20] ИНФОРМАЦИЯ -: [c5de6e8e-58e2-4177-ae17-e1f58fbb65ee] Обработка с помощью UsersController # создать как / 2018-11-07T05: 04: 21.901161 + 00: 00 app [web.1]: I, [2018-11-07T05: 04: 21.901036 # 20] INFO -: [c5de6e8e-58e2-4177-ae17-e1f58fbb65ee] Параметры: {"EMAIL" => "jakeywtf34@gmail.com", "PASSWORD" => "[FILTERED]"}

2018-11-07T05: 04: 21.902007 + приложение 00: 00 [web.1]: W, [2018-11-07T05: 04: 21.901922 # 20] ПРЕДУПРЕЖДЕНИЕ -: [c5de6e8e-58e2-4177-ae17-e1f58fbb65ee] Не удается проверить токен CSRF подлинность. 2018-11-07T05: 04: 21.907902 + 00: 00 приложение [web.1]: создание прогонов

2018-11-07T05: 04: 21.907965 + 00: 00 приложение [web.1]: user_params запускается

2018-11-07T05: 04: 21.908031 + 00: 00 app [web.1]: если не указано состояние user_params 2018-11-07T05: 04: 22.141541 + 00:00 приложение [web.1]: D,

[2018-11-07T05: 04: 22.141393 # 20] DEBUG -: [c5de6e8e-58e2-4177-ae17-e1f58fbb65ee] [1 м [35 м (5,0 мс) [0 м] [1m [35mBEGIN [0m 2018-11-07T05: 04: 22.145580 + 00: 00 app [web.1]: D, [2018-11-07T05: 04: 22.145463 # 20] DEBUG -: [c5de6e8e-58e2-4177-ae17-e1f58fbb65ee] [1 м [36mUser Exists] (2,5 мс) [0 м [1 м [34 м ВЫБРАТЬ 1 КАК ОТ «пользователей» ГДЕ LOWER ("users". "Email") = LOWER ($ 1) LIMIT $ 2 [0m [["email", "jakeywtf34@gmail.com"], ["LIMIT", 1]]

2018-11-07T05: 04: 22.149368 + 00:00 приложение [web.1]: D,

[2018-11-07T05: 04: 22.149270 # 20] DEBUG -: [c5de6e8e-58e2-4177-ae17-e1f58fbb65ee] [1 м [35mSQL (2,1 мс) [0 м] [1m [32mINSERT INTO "users" ("email", "creation_at", "updated_at", "password_digest") ЗНАЧЕНИЯ ($ 1, $ 2, $ 3, $ 4) ВОЗВРАЩАЯ "id" [0m [["email", "jakeywtf34@gmail.com"], ["creation_at", "2018-11-07 05: 04: 22.146010 "], [" updated_at "," 2018-11-07 05: 04: 22.146010 "], [ "Password_digest", "$ 2a $ 10 $ g.RhGJDfl23 / zPDeyXEI.OcnsfKfYH3jE4GB7py6 / ktMJ3N6y73OW"]]

2018-11-07T05: 04: 22.153387 + приложение 00:00 [web.1]: D,

[2018-11-07T05: 04: 22.153287 # 20] DEBUG -: [c5de6e8e-58e2-4177-ae17-e1f58fbb65ee] [1 м [35 м (3,5 мс) [0 м] [1m [35mCOMMIT [0m 2018-11-07T05: 04: 22.153528 + 00: 00 app [web.1]: пользователь прогоны сохранения 2018-11-07T05: 04: 22.153618 + 00:00 приложение [web.1]: второе приветствие в ваше хранилище (users_cont) 2018-11-07T05: 04: 22.154318 + 00: 00 приложение [web.1]: Я,

[2018-11-07T05: 04: 22.154239 # 20] ИНФОРМАЦИЯ -: [c5de6e8e-58e2-4177-ae17-e1f58fbb65ee] Перенаправлено на https://immense -castle-53592.herokuapp.com / пользователи / 126

2018-11-07T05: 04: 22.154585 + 00:00 приложение [web.1]: I,

[2018-11-07T05: 04: 22.154507 # 20] ИНФОРМАЦИЯ -: [c5de6e8e-58e2-4177-ae17-e1f58fbb65ee] Завершено 302 Найдено за 253 мс (ActiveRecord: 13.0ms) 2018-11-07T05: 04: 22.221827 + 00: 00 app [web.1]: I,

[2018-11-07T05: 04: 22.221705 # 6] ИНФОРМАЦИЯ -: [972376e5-2f11-4985-91fe-53b071181359] Запущен GET "/ users / 126" для 76.120.71.73 в 2018-11-07 05:04:22 +0000 2018-11-07T05: 04: 22.229274 + 00:00 приложение [web.1]: I,

[2018-11-07T05: 04: 22.229112 # 6] ИНФОРМАЦИЯ -: [972376e5-2f11-4985-91fe-53b071181359] Обработка с помощью UsersController # отображается как / 2018-11-07T05: 04: 22.230258 + 00: 00 приложение [web.1]: I,

[2018-11-07T05: 04: 22.230174 # 6] ИНФОРМАЦИЯ -:[972376e5-2f11-4985-91fe-53b071181359] Параметры: {"id" => "126"}

2018-11-07T05: 04: 22.156370 + 00:00 геройку [роутер]: at = метод info = POST путь = "/ регистрация" хост = immense-castle-53592.herokuapp.com request_id = c5de6e8e-58e2-4177-ae17-e1f58fbb65ee fwd = "76.120.71.73" dyno = web.1 connect = 1ms service = 264ms status = 302 bytes = 559 протокол = https 2018-11-07T05: 04: 22.419460 + 00:00 приложение [web.1]: D,

[2018-11-07T05: 04: 22.419270 # 6] DEBUG -: [972376e5-2f11-4985-91fe-53b071181359] [1 м [нагрузка на 36 м (6,4 мс) [0 м [1 м [34 мВЫБРАТЬ «пользователи». * ОТ «пользователей» ГДЕ "users". "id" = $ 1 LIMIT $ 2 [0m [["id", 126], ["LIMIT", 1]]

2018-11-07T05: 04: 22.469417 + 00:00 приложение [web.1]: I,

[2018-11-07T05: 04: 22.469246 # 6] ИНФОРМАЦИЯ -: [972376e5-2f11-4985-91fe-53b071181359] Рендеринг пользователей / show.html.erb в макетах / заявка 2018-11-07T05: 04: 22.470569 + 00: 00 приложение [web.1]: I,

[2018-11-07T05: 04: 22.470487 # 6] ИНФОРМАЦИЯ -: [972376e5-2f11-4985-91fe-53b071181359] Предоставленные пользователи / show.html.erb в макетах / приложении (1,0 мс) 2018-11-07T05: 04: 22,484847 + 00: 00 приложение [web.1]: I,

[2018-11-07T05: 04: 22.484727 # 6] ИНФОРМАЦИЯ -: [972376e5-2f11-4985-91fe-53b071181359] Предоставлено layouts / _rails_default.html.erb (4,8 мс)

2018-11-07T05: 04: 22.497488 + 00: 00 app [web.1]: I,

[2018-11-07T05: 04: 22.497361 # 6] ИНФОРМАЦИЯ -: [972376e5-2f11-4985-91fe-53b071181359] Предоставлено макеты / _shim.html.erb (0,5 мс) 2018-11-07T05: 04: 22,526778 + 00: 00 приложение [web.1]: я,

[2018-11-07T05: 04: 22.526644 # 6] ИНФОРМАЦИЯ -: [972376e5-2f11-4985-91fe-53b071181359] Предоставлено layouts / _header.html.erb (12.1ms) 2018-11-07T05: 04: 22.540219 + 00: 00 приложение [web.1]: I,

[2018-11-07T05: 04: 22.540092 # 6] ИНФОРМАЦИЯ -: [972376e5-2f11-4985-91fe-53b071181359] Предоставлено layouts / _footer.html.erb (1.0ms) 2018-11-07T05: 04: 22.541427 + 00: 00 приложение [web.1]: я,

[2018-11-07T05: 04: 22.541342 # 6] ИНФОРМАЦИЯ -: [972376e5-2f11-4985-91fe-53b071181359] Завершено 200 OK за 311 мс (Просмотры: 83,8мс | ActiveRecord: 103,3мс)

2018-11-07T05: 04: 22.544712 ​​+ 00:00 геройку [роутер]: at = метод информации = GET путь = "/ users / 126" host = immense-castle-53592.herokuapp.com request_id = 972376e5-2f11-4985-91fe-53b071181359 fwd = "76.120.71.73" dyno = web.1 connect = 1 мс сервис = 324 мс статус = 200 байт = 2692 протокол = HTTPS

Когда я делаю это с обычными формами ввода, как показано ниже, происходит тот же журнал перенаправления, и он на самом деле переходит на страницу пользователей .:

  <%= f.label :email %>
  <%= f.email_field :email, class: 'form-control' %>

  <%= f.label :password %>
  <%= f.password_field :password, class: 'form-control' %>

Кажется, что WEBGL блокирует эту штуку и отказывается перенаправлять страницу, даже если это должно происходить . Чего мне не хватает?

ОБНОВЛЕНИЕ 12-6-18:

Я заметил, что когда WEBGL инициирует перенаправление (безуспешно), я получаю это в журнале: Обработка UsersController # показывается как / . Если я перенаправляю из обычной HTML-формы (успешно), я получаю это в журнале: Обработка UsersController # показывать как HTML. Это единственное отличие в логах.

Я проверил следующее:

  1. Протестировано с несколькими браузерами, чтобы определить, является ли оно специфичным для определенных
  2. Протестировано с изменением URL-адреса перенаправления на https://www.google.co.uk/ для проверки успешности перенаправления
  3. Добавлено условие, обеспечивающее завершение перенаправления перед продолжением работы со сценариями
  4. Попытка тестирования Heroku через LocalHost (все еще не продолжалась) К сожалению, ни один из этих тестов не дал каких-либо показательных результатов.

Применимый код UnityWebRequest C # из игры. Экземпляр:

phase4 = true;
        Invoke ("QuitGame", 10f);
  }
      }

    private  IEnumerator  Connection ( string  name )
    {
    WWWForm  form  =  new WWWForm ();
    form . AddField ( "EMAIL" ,  _email );
    form . AddField ( "PASSWORD" ,  passwordUnityEncrypted );
    form . AddField ( "HOST_URL" ,  absoluteURL );
    form . AddField ( "SIGNUP_PATH" ,  _url_signup_route );
    form . AddField ( "LOGIN_PATH" ,  _url_login_route );

    if (absoluteURL == _url_signup){
    UnityWebRequest  request  =  UnityWebRequest . Post ( 
    _url_signup_route ,  form );
    yield  return  request . Send ();
    } else{
    UnityWebRequest  request  =  UnityWebRequest . Post ( 
    _url_login_route ,  form );
    yield  return  request . Send ();
    }

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Я делаю пару предположений здесь, но я предполагаю, что javascript за gameInstance отправляет запрос на публикацию, если это так, то я бы проверил, правильно ли он обрабатывает перенаправление.

Обновлено

Вам нужно будет обработать перенаправление вручную (если я правильно понимаю документацию Unity).

Вы можете получить URL перенаправления из заголовка местоположения, используя UnityWebRequest.GetResponseHeader

Получив URL-адрес местоположения, вы сможете использовать Application.OpenURL , который обновит местоположение браузера, если вы используете веб-плеер.

private  IEnumerator  Connection ( string  name ) {
  WWWForm  form  =  new WWWForm ();
  form . AddField ( "EMAIL" ,  _email );
  form . AddField ( "PASSWORD" ,  passwordUnityEncrypted );
  form . AddField ( "HOST_URL" ,  absoluteURL );
  form . AddField ( "SIGNUP_PATH" ,  _url_signup_route );
  form . AddField ( "LOGIN_PATH" ,  _url_login_route );

  string post_url = "";
  if (absoluteURL == _url_signup) {
    post_url = _url_signup_route;
  } else { 
    post_url = _url_login_route;
  }

  UnityWebRequest request = UnityWebRequest.Post(post_url, form);
  yield  return  request.Send();

  string location = request.GetResponseHeader('location');
  Application.OpenURL(location);
}

Мой C # ржавый / не существует, поэтому там могут быть ошибки, но это должно дать вам направление, которому нужно следовать.

0 голосов
/ 07 декабря 2018

Вам нужно будет обработать редирект в Javascript с помощью Unity. По сути, что-то вроде document.location = "http://example.com", но с учетом этого example.com из ответа на запрос (было бы намного лучше, если бы ответ был JSON с путем, который будет перенаправлен во встроенный внутри)

...