Я настроил сервер авторизации и у меня есть несколько серверов ресурсов. Я настроил конечную точку для регистрации пользователей на моем сервере аутентификации, однако я отправляю пользователям общее электронное письмо для подтверждения их электронной почты. Проблема в том, что я хотел бы, чтобы ссылка для обратного вызова после подтверждения возвращалась на тот сервер ресурсов, который инициировал первоначальный запрос, и направляла их обратно на соответствующий веб-сайт для входа. Когда я регистрируюсь, мне нужно взять это с собой, пожалуйста, сообщите, и посмотрите конечную точку регистрации ниже:
/// <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);
}