예제 #1
0
        async Task <IHttpActionResult> Create(AccountEmailSignIn model)
        {
            if (string.IsNullOrEmpty(model.UserId))
            {
                model.UserId = Guid.NewGuid().ToString();
            }

            if (await AppDatabase.Users.AnyAsync(o => o.Id == model.UserId))
            {
                return(BadRequest("UserId is in use."));
            }
            if (await AppDatabase.Users.AnyAsync(o => o.Email == model.Email))
            {
                return(BadRequest("Email is in use."));
            }

            var user = new UserAccount
            {
                Email         = model.Email,
                Id            = model.UserId,
                CreatedOn     = DateTime.UtcNow,
                ModifiedOn    = DateTime.UtcNow,
                EmailPassword = UserPassword.Create(model.Password),
                PhonePassword = UserPassword.Create(model.Password),
            };

            AppDatabase.Users.Add(user);

            await AppDatabase.SaveChangesAsync();

            await SendWelcomeMail(new UserEmailViewModel
            {
                UserId    = user.Id,
                UserEmail = user.Email
            });


            //Sign In
            Authorization.UpdateFrom(user);
            Session.UpdateFrom(user);

            return(Ok(GetAccountDetails()));
        }
예제 #2
0
        public async Task <IHttpActionResult> SignIn(AccountEmailSignIn model)
        {
            var user = await AppDatabase.Users.FirstOrDefaultAsync(o => o.Email == model.Email);

            if (user == null)
            {
                return(await Create(model));
            }

            if (!user.EmailPassword.Compare(model.Password))
            {
                return(BadRequest("Invalid password."));
            }

            //Sign In
            Authorization.UpdateFrom(user);
            Session.UpdateFrom(user);

            return(Ok(GetAccountDetails()));
        }