Ошибка при проверке токена доступа: сеанс недействителен, поскольку пользователь вышел из системы - PullRequest
2 голосов
/ 29 мая 2011

Мой код:

 var fbWebContext = FacebookWebContext.Current;
 if (fbWebContext.IsAuthorized())
 {
      var fb = new FacebookWebClient(fbWebContext);
      dynamic result = fb.Get("/me");

      name.Text = result.name;
 }

 dynamic result = fb.Get("/me");

кидает:

(OAuthException) Ошибка при проверке токена доступа: сеанс недействителен, поскольку пользователь вышел из системы.

Как мне изменить свой код, чтобы предотвратить это?

Ответы [ 3 ]

2 голосов
/ 31 мая 2011

Вы можете запросить расширенное разрешение «offline_access».Это предотвратит это сообщение, и пользователю не придется каждый раз входить в систему.

2 голосов
/ 29 мая 2011

Вы действительно не можете предотвратить это, вам просто нужно поймать исключение и разобраться с ним. Ну ладно, вы могли бы предотвратить это, я думаю, на стороне клиента, сделав несколько эквивалентных вызовов из FB Javascript SDK, чтобы обнаружить плохой сеанс (истек, вышел из системы, пользователь изменил свой пароль и т. Д.) И заставил их снова войти в систему на клиент перед вызовом вашего серверного кода.

Если вы посмотрите на исходный код Facebook C # SDK, вы увидите, что IsAuthorized () = IsAuthenticated (). Все, что делает IsAuthenticated, это проверяет, есть ли у вас Сессия, и что время истечения Сессии не прошло. Сессия могла быть признана недействительной, если пользователь вышел на сервер без уведомления.

Есть и другие исключения OAuth на Facebook, которые вы можете получить здесь. Лучше всего обернуть вышеупомянутый код в try / catch и разобраться с исключениями, повторно предложив пользователю войти в систему и получить новый сеанс с ними.

0 голосов
/ 30 мая 2011

А как насчет объекта CanvasAnthorizer?Разве этот объект не гарантирует, что пользователь зарегистрирован и имеет правильные права доступа?

...