Служебная корзина позволяет один и тот же адрес электронной почты для нескольких пользователей - PullRequest
1 голос
/ 24 октября 2019

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

    public class MyOrmLiteAuthRepository : OrmLiteAuthRepository
    {
        public MyOrmLiteAuthRepository(IDbConnectionFactory dbFactory) : base(dbFactory) { }

        public MyOrmLiteAuthRepository(IDbConnectionFactory dbFactory, string namedConnnection = null)
            : base(dbFactory, namedConnnection)
        {
            DbFactory = dbFactory;
            NamedConnnection = namedConnnection;
        }

        protected override void AssertNoExistingUser(IDbConnection db, IUserAuth newUser, IUserAuth exceptForExistingUser = null)
        {
            //I hate using try catch for simple stuff, it is very slow,
            //But this is only during new users being added so low risk for slow
            //and the base class should be called to do its native stuff
            try
            {
                base.AssertNoExistingUser(db,newUser);
            }
            catch (Exception e)
            {
                if (e.Message.Contains("Email"))
                {
                    //mask duplicate email messages
                    return;
                }
                //throw any other errors on new user creation.
                throw;
            }
        }

public IDbConnectionFactory DbFactory { get; set; }
        public string NamedConnnection { get; set; }

        public override ICollection<string> GetPermissions(string userAuthId)
        {
            //Ignore this as we have implemented our own security
            // base.GetPermissions(userAuthId);

            using (var ss = HostContext.ResolveService<SecurityService>(new BasicRequest()))
            {
                return ss.UserPermissions(Convert.ToInt32(userAuthId));
            }

        }

1 Ответ

2 голосов
/ 24 октября 2019

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

Если вы просто хотите сохранить тот же адрес электронной почтыадрес в нескольких пользователей, вы можете сохранить его в PrimaryEmail, который не проверен или не используется в аутентификации.

...