Сервер разбора: Обработка ошибок с кодом 209 «Токен сеанса истек».для автоматических (анонимных) пользователей - PullRequest
0 голосов
/ 31 мая 2018

Мое приложение iOS использует функцию автоматического пользователя Parse Server, а именно пользователям не нужно предоставлять учетные данные для входа, а вместо этого они регистрируются автоматически и анонимно.Это не пользователи, которые были перенесены с Parse.com, а автоматические пользователи с отзывными сеансами, сгенерированными размещенным сервером Parse.

Наша клиентская инициализация Parse выглядит следующим образом:

[Parse initializeWithConfiguration:[ParseClientConfiguration configurationWithBlock:^(id<ParseMutableClientConfiguration> _Nonnull configuration) { 
    configuration.applicationId = <our app id>; 
    configuration.clientKey = <our client key>; 
    configuration.server = <our server>; }]];

// Users 
[PFUser enableRevocableSessionInBackground]; 
[PFUser enableAutomaticUser];
[PFACL setDefaultACL:[PFACL ACL] withAccessForCurrentUser:YES];

На сервере «Срок действия неактивного сеанса» - ДА, а «Отменить сеанс при сбросе пароля» - ДА.Продолжительность сеанса составляет 1 год в секундах.Я не до конца понимаю, что представляет собой «неактивный» сеанс с точки зрения «Expire inactive session», и что именно представляет собой «Expire» - удаление из базы данных или просто недопустимость токена.Мне кажется, что сеанс остается действительным просто для «продолжительности сеанса» после его начала, независимо от других факторов.

Исходя из этого понимания, все работает так, как ожидалось - пользователь может обмениваться данными с базой данных - и через 1 год токен сеанса, кажется, истекает естественным образом.

Я отмечаю, что в ParseВкладка аутентификации сервера «Настройки аутентификации приложения», для которой «Включить анонимную аутентификацию» фактически установлена ​​на «НЕТ».Насколько я понимаю, это позволит пользователям обмениваться данными с сервером Parse без действительного токена сеанса или действительного объекта PFUser.На самом деле это не то, что мы хотим - мы хотим, чтобы действительный анонимный PFUser общался, поскольку позже мы можем захотеть перейти к обычному PFUser.Я попытался переключить его на ДА, но мы все еще видим те же ошибки.

При стандартном потоке входа в систему можно было бы четко отобразить экран, позволяющий пользователю войти в систему и обновить свой токен.Однако в случае автоматических или анонимных пользователей это не имеет смысла - они никогда не вводили учетные данные для входа в систему, и поэтому у них нет возможности обновить свои учетные данные вручную.

Учитывая, что автоматический пользователь включен, я быожидали, что Parse Server автоматически сгенерирует новый маркер сеанса для пользователя с анонимными учетными данными.Вместо этого любое взаимодействие с сервером или базой данных завершается с ошибкой:

Домен ошибки = Код разбора = 209 «Токен сеанса истек».UserInfo = {код = 209, временный = 0, ошибка = токен сеанса истек., NSLocalizedDescription = токен сеанса истек.}

Может кто-нибудь помочь мне с решением?

Я использую Parse Server v2.3.2 с MongoDB v3.0.12 и iOS Parse SDK v1.17.1.Я могу посмотреть, чтобы обновить до последних версий, но я хочу потратить время, чтобы понять, в чем проблема, и если / как это может решить проблему.

Удаление приложения и его повторная установка решает проблемупотому что генерируется новый автоматический пользователь и предоставляется новый токен сеанса.В базе данных это выглядит как совершенно новый пользователь, а старый навсегда остается неиспользованным.

Я хотел бы реализовать решение, которое просто предоставляет новый сеансовый токен анонимным пользователям с токеном с истекшим сроком действия.Кажется, что я должен установить конечную продолжительность сеанса, и я бы предпочел не просто установить его на 100 лет - это не решает проблему для существующих пользователей и выглядит как хак.

Спасибо за вашу помощь.

С уважением, Алекс

1 Ответ

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

Это было подтверждено как известная проблема с Parse Server начиная с v2.8.0 или более ранней версии.

Промежуточным решением было просто обновить нашу базу данных и вручную установить для всех полей expiresAt в объектах PFSession значениедата в будущем.Кроме того, мы увеличили «продолжительность сеанса» в настройках нашего сервера до 3 лет, чтобы дать нам больший буфер для новых пользователей.

Тем временем обсуждается правильная обработка истечения токена для автоматических пользователей, ирешение, скорее всего, появится в будущем обновлении Parse Sever.Пожалуйста, смотрите мой Parse Server Github Issue .

...