Rails: переменные сессии возвращают ноль после redirect_to - PullRequest
0 голосов
/ 04 июня 2018

Я создаю API-интерфейс rails, где

ajax-запрос (передний конец) отправляет запрос на получение rails следующим образом:

get-запрос -> вход в систему контроллера пользователя (user # index) -> Контроллер экранов (screen # index) -> отправить ответный ответ переднему краю.

Проблема: Сеанс входа в систему теряется при перенаправлении его на экран # index.

Код:

FRONTEND (расположенпо адресу: 127.0.0.1/3000, разрешенные значения Cors на рельсах)

$.ajax({
  url: "http://127.0.0.1:6536/user/index", 
  type: 'GET',
  success: function(result){
    console.log(result);
  }
});

BACKEND

маршруты:

 get '/user/index' => "user#index", defaults: {format: 'json'}
 get '/screen', to: 'screen#index', defaults: {format: 'json'}

UserController:

 class UserController < ActionController::Base

   def index
     # check if user exists exists in database
     session[:user_id] = 23 

     Rails.logger.info '----------- registered user'
     Rails.logger.info session['user_id']
     redirect_to '/screen'
   end
 end

ScreenController:

 class ScreenController < ActionController::Base

   def index
     Rails.logger.info '----------- fetching user'
     Rails.logger.info session['user_id']

     user = User.find(session['user_id']) # do something with the user
     render json: { status: 'registered' }, status: :ok
   end
 end

ВЫХОД

 Started GET "/user/index" for 127.0.0.1 at 2018-06-04 11:50:24 +0530
 Processing by UserController#index as JSON
 ----------- registered user
 23
 Redirected to http://127.0.0.1:6536/screen
 Completed 302 Found in 34ms (ActiveRecord: 10.5ms)


 Started GET "/screen" for 127.0.0.1 at 2018-06-04 11:50:24 +0530
 Processing by ScreensController#index as JSON
 ----------- fetching user

 User Load (0.5ms)  SELECT  "users".* FROM "users" WHERE "users"."id" IS NULL LIMIT   [["LIMIT", 1]]
 Completed 500 Internal Server Error in 5ms (ActiveRecord: 0.5ms)

ScreenController имеет нулевые значения сеанса.Почему сеанс теряется между перенаправлением контроллера?

Если я получаю страницу http://127.0.0.1:6536/user/index в браузере, она работает нормально.

Rails входит в систему поиска браузера:

 Started GET "/user/index" for 127.0.0.1 at 2018-06-04 12:26:51 +0530
 Processing by UserController#create as JSON
 ----------- registered user
 23
 Redirected to http://127.0.0.1:6536/screen
 Completed 302 Found in 1ms (ActiveRecord: 0.0ms)


 Started GET "/screen" for 127.0.0.1 at 2018-06-04 12:26:51 +0530
 Processing by ScreenController#index as JSON
 ----------- fetching user
 23
 Completed 200 OK in 2ms (Views: 0.4ms | ActiveRecord: 0.0ms)

1 Ответ

0 голосов
/ 04 июня 2018

Вам необходимо добавить код перенаправления и выполнить условный рендеринг в разделе успеха вызова AJAX

function make_ajax_call(url){
      $.ajax({
      url: url, 
      type: 'GET',
      success: function(response) {
         if (response.redirect){
           make_ajax_call(response.redirect); // will make a recursive call
         }
          else
         {
          console.info(response.body);
        }
       }
    });
}
...