Добавление пользовательских результатов входа в систему к тому, что возвращается из SignInManager ‹TUser› PasswordSignInAsync

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

Я бы реализовал пользовательский SignInManager, но PasswordSignInAsync по-прежнему возвращает конкретный SignInResult, и я не уверен, можно ли вклиниться в мои дополнительные желаемые состояния там.


person Francis Spor    schedule 01.08.2018    source источник


Ответы (1)


Да, вы не сможете просто переопределить PasswordSignInAsync, но вы можете создать новый метод, который возвращает ваш собственный класс результатов и просто передает фактическую часть входа в PasswordSignInAsync.

Однако к тому времени, когда вы закончите создавать производные типы с настраиваемыми методами и состояниями и загружать все, вероятно, будет проще и проще просто прочитать значение от пользователя после входа в систему и отреагировать соответствующим образом. Например, вы можете (и, вероятно, должны) установить принятие EULA в качестве требования к пользователю. Затем вы можете просто сделать что-то вроде:

// sign in user

if (User.FindFirstValue("eula") == null)
{
    return Redirect("/eula");
}

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

person Chris Pratt    schedule 01.08.2018
comment
Я вроде как хотел бы сделать что-то более волшебное и в соответствии с существующей инфраструктурой входа, но я думаю, что ваше предложение фильтра - это то, что я собираюсь использовать. Спасибо. - person Francis Spor; 01.08.2018