ServiceStack Twitter Авторизация и регистрация

У меня есть приложение, которое работает с использованием CredentialsAuthProvider() в течение некоторого времени.

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

  //Register all Authentication methods you want to enable for this web app.            
  Plugins.Add(new AuthFeature(() => new AuthUserSession(),
    new IAuthProvider[] {
      new CredentialsAuthProvider(),
      new TwitterAuthProvider(appSettings),
      new FacebookAuthProvider(appSettings)
  }));


  //Provide service for new users to register so they can login with supplied credentials.
  Plugins.Add(new CustomRegistrationFeature());

Конечные точки / api / auth / twitter и / api / auth / facebook работают, и я вижу, что пользовательский сеанс создается путем посещения / api / auth после завершения процесса OAuth ОДНАКО...

В моем UserAuthRepository (OrmLiteAuthRepository) не создано ни одного пользователя. Идентификатор пользователя, сохраненный в сеансе, недействителен. Любой метод, украшенный атрибутом [Authenticate], вызывает ошибку 404 (пользователь не найден).

Я ожидаю, что пользователь создается с помощью First/Last/Email, полученного из Facebook или Twitter. Я что-то неправильно понимаю?

ServiceStack v4.0.38

2 ответа

Решение

Я хотел обновить эту ветку, чтобы сказать, что я обновился до ServiceStack 4.0.42, и эта проблема разрешилась сама собой.

Несколько вещей, чтобы проверить, будет oauth.CallbackUrl был установлен правильно с учетом нескольких зарегистрированных вами провайдеров. Например http://localhost/auth/{0},

Также вы должны проверить, если ваш IDbConnectionFactory используется с вашим OrmLiteAuthRepository также был зарегистрирован в контейнере IoC. Например

var dbFactory = new OrmLiteConnectionFactory(
    "~/App_Data/db.sqlite".MapHostAbsolutePath(),
    SqliteDialect.Provider);

container.Register<IDbConnectionFactory>(dbFactory);
var authRepo = new OrmLiteAuthRepository(dbFactory);
container.Register<IUserAuthRepository>(authRepo);

authRepo.InitSchema();
Другие вопросы по тегам