Получить URL-адрес сервера ресурсов на сервере авторизации в MVC OWIN - PullRequest
0 голосов
/ 26 октября 2018

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

/// <summary>
    /// Register a new user
    /// </summary>
    /// <param name="model"></param>
    /// <returns></returns>
    [AllowAnonymous]
    [Route("Register")]
    public async Task<IHttpActionResult> Register(RegisterBindingModel model)
    {
        if (!ModelState.IsValid)
        {
            var errors = new List<string>();
            foreach (var modelState in ModelState.Values)
            {
                foreach (var error in modelState.Errors)
                {
                    errors.Add(error.ErrorMessage);
                }
            }
            var errorResponse = new Response<RegisterResponse>
            {
                IsSuccessful = false,
                Message = "Invalid Request",
                Data = new RegisterResponse
                {
                    Errors = errors
                }
            };
            return new ErrorMessageResult<Response<RegisterResponse>>(errorResponse);
        }

        var user = new User
        {
            UserName = model.Email,
            Email = model.Email,
            FirstName = model.FirstName,
            LastName = model.LastName,
            IDNumber = model.IDNum,
            PassportNumber = model.PassportNo,
            CellphoneNumber = model.CellNo,
            PhoneNumber = model.PhoneNo,
            Company = model.Company
        };

        IdentityResult result = await UserManager.CreateAsync(user, model.Password);

        if (result.Succeeded)
        {
            // Send an email with this link
            var code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
            var req = Request.GetOwinContext().Request;
            string baseUrl = HttpContext.Current.Request.Url.Scheme + "://" + HttpContext.Current.Request.Url.Authority +
                             HttpContext.Current.Request.ApplicationPath.TrimEnd('/') + "/";
            var newRouteValues = new RouteValueDictionary(new {userId = user.Id, code = code, clientUrl = "http://www.google.co.za"}) {{"httproute", true}};
            var urlHelper = new System.Web.Mvc.UrlHelper(HttpContext.Current.Request.RequestContext, RouteTable.Routes);
            string callbackUrl = urlHelper.Action(
                "ConfirmEmail",
                "Account",
                newRouteValues,
                HttpContext.Current.Request.Url.Scheme
            );

            var emailModel = new EmailModel
            {
                TemplateName = "ConfirmAccountEmail",
                Url = callbackUrl,
                ToName = User.Identity.Name
            };
            var data = JsonConvert.SerializeObject(emailModel);
            await UserManager.SendEmailAsync(user.Id, "User Authentication Service: Email Confirmation", data);
        }

        if (!result.Succeeded)
        {
            return GetErrorResult(result);
        }

        var response = new Response<RegisterResponse>
        {
            Message = "User successfully registered",
            IsSuccessful = true,
            Data = new RegisterResponse
            {
                UserId = user.Id,
                FirstName = user.FirstName,
                EmailAddress = user.Email,
                LastName = user.LastName
            }
        };
        return Ok(response);
    }

1 Ответ

0 голосов
/ 31 октября 2018

Оказывается, это проще, чем я думал.Чтобы получить URL, вы можете использовать:

var clientUri = HttpContext.Current.Request.UrlReferrer.AbsoluteUri;

...