コード例 #1
0
        public async Task <IActionResult> Login([FromBody] LoginModel model)
        {
            var connectionInfo = new ConnectionInfo
            {
                IpAddress   = Request.HttpContext.Connection.RemoteIpAddress,
                BrowserInfo = UserAgentParser.FromUserAgent(Request.Headers["User-Agent"])
            };
            var loginResponse = await _userService.LoginUser(new Email(model.Email), model.Password, model.TwoFactorCode, connectionInfo);

            if (!loginResponse.Success)
            {
                switch (loginResponse.Error)
                {
                case LoginError.InvalidLoginDetails:
                    return(StatusCode(401, new ErrorResult <string> {
                        Error = StrResource.UsernameOfPasswordInvalid
                    }));

                case LoginError.NotValidatedEmail:
                    return(StatusCode(403, new ErrorResult <string> {
                        Error = StrResource.EmailNotVerified
                    }));

                case LoginError.NotWhitelistedIp:
                    return(StatusCode(403, new ErrorResult <string> {
                        Error = StrResource.EmailWhitelistIpAddress
                    }));

                case LoginError.TwoFactorRequiered:
                    return(StatusCode(403, new ErrorResult <string> {
                        Error = StrResource.TwoFactorCodeRequiered
                    }));

                case LoginError.TwoFactorInvalid:
                    return(StatusCode(401, new ErrorResult <string> {
                        Error = StrResource.TwoFactorCodeInvalid
                    }));

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }


            var response = new OAuthTokenResponse
            {
                AccessToken  = loginResponse.OAuthToken.AccessToken,
                Expires      = loginResponse.OAuthToken.Expires.ToUnixTimeSeconds(),
                Type         = loginResponse.OAuthToken.Type.ToString(),
                RefreshToken = loginResponse.OAuthToken.RefreshToken,
            };

            return(Ok(new SuccessResult <OAuthTokenResponse> {
                Data = response
            }));
        }