Мой код:
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) Ошибка проверки маркера доступа: сеанс недействителен, поскольку пользователь вышел из системы.
Как мне изменить код для предотвращения этого?
Вы можете запросить расширенное разрешение "offline_access". Это предотвратит это сообщение, и пользователь не будет входить в систему каждый раз.
Вы действительно не можете этого предотвратить, вам просто нужно поймать исключение и справиться с ним. Хорошо Хорошо, что вы можете предотвратить это, я думаю, на стороне клиента, выполнив некоторые эквивалентные вызовы из SDK FB Javascript, чтобы обнаружить плохой сеанс (истек, вышел из системы, пользователь изменил свой пароль и т.д.) И заставил их снова войти в систему на клиент перед вызовом кода на стороне сервера.
Если вы посмотрите на исходный код Facebook С# SDK, вы увидите, что IsAuthorized() = IsAuthenticated(). Все IsAuthenticated делает проверку, чтобы увидеть, есть ли у вас сеанс, и что время истечения сеанса не прошло. Сессия могла быть признана недействительной при выходе пользователя из системы без ведома сервера.
Существуют и другие исключения OAuth Facebook, которые вы можете получить здесь. Лучше всего обернуть вышеуказанный код в try/catch и обработать исключения, повторно предложив пользователю войти в систему и получить новый сеанс с ними.
Как насчет объекта CanvasAnthorizer? Не гарантирует ли этот объект, что пользователь зарегистрирован и имеет правильные разрешения?