コード例 #1
0
        /// <summary>
        /// Login User by external provider and return ClaimsIdentity
        /// </summary>
        /// <param name="request">Instance of LoginExternalRequest</param>
        /// <returns>Instance of LoginExternalResponse</returns>
        public async Task <LoginExternalResponse> LoginExternalAsync(LoginExternalRequest request)
        {
            LoginExternalResponse response = new LoginExternalResponse();

            try
            {
                string authType = EnumStringValue.GetStringValue(request.AuthenticationType);

                AspNetUser user = await UserManager.FindAsync(new UserLoginInfo(request.LoginProvider, request.ProviderKey));

                ClaimsIdentity identity = await UserManager.CreateIdentityAsync(user, authType);

                response.ClaimIdentity = identity.ConvertToClaimIdentityView();
                response.Success       = true;
            }
            catch (Exception e)
            {
                response.Success = false;
                response.Errors.Add(e.Message);
            }

            return(response);
        }
コード例 #2
0
        public async Task <IActionResult> LoginExternalCallbackAsync(string scheme)
        {
            AuthenticateResult authenticateResult = await HttpContext.AuthenticateAsync(scheme);

            if (authenticateResult.Succeeded)
            {
                string memberUsername = authenticateResult.Principal.FindFirstValue(ClaimTypes.Email);
                string externalID     = authenticateResult.Principal.FindFirstValue(ClaimTypes.NameIdentifier);
                string name           = authenticateResult.Principal.FindFirstValue(ClaimTypes.Name);

                string pictureUrl = PictureURLHelper.GetPictureURL(authenticateResult);

                LoginExternalRequest request = new LoginExternalRequest
                {
                    MemberUsername = memberUsername,
                    ExternalID     = externalID,
                    SchemeProvider = SchemeProvider.FromString(scheme),
                    FullName       = name,
                    PictureURL     = pictureUrl
                };

                var response = await Mediator.Send(request);

                if (!string.IsNullOrEmpty(response.Token))
                {
                    return(Redirect($"{_currentWeb.BaseURL}/account/login-external?token={response.Token}"));
                }
                else
                {
                    return(Redirect($"{_currentWeb.BaseURL}/account/login"));
                }
            }
            else
            {
                return(Redirect($"{_currentWeb.BaseURL}/account/login"));
            }
        }
コード例 #3
0
        /// <summary>
        /// Login User by external provider and return ClaimsIdentity
        /// </summary>
        /// <param name="request">Instance of LoginExternalRequest</param>
        /// <returns>Instance of LoginExternalResponse</returns>
        public async Task<LoginExternalResponse> LoginExternalAsync(LoginExternalRequest request)
        {
            LoginExternalResponse response = new LoginExternalResponse();

            try
            {
                string authType = EnumStringValue.GetStringValue(request.AuthenticationType);

                AspNetUser user = await UserManager.FindAsync(new UserLoginInfo(request.LoginProvider, request.ProviderKey));
                ClaimsIdentity identity = await UserManager.CreateIdentityAsync(user, authType);

                response.ClaimIdentity = identity.ConvertToClaimIdentityView();
                response.Success = true;
            }
            catch (Exception e)
            {
                response.Success = false;
                response.Errors.Add(e.Message);
            }

            return response;
        }