Делаю подтверждение Токена по Email и при подтверждении ссылки в почтовом ящике, осуществляется переход в новую вкладку, мне захотелось сделать переход в том же окне где и почта!
Работает обычная реализация OWIN/KAtana, оригинал отправки письма взят: https: //blogs. msdn.microsoft. com/webdev/2014/02/18/adding-two-factor-authentication-to-an-application-using-asp-net-identity/# (пробелы нужно убрать)
(Сделаны первые 9 пунктов, обычное подтверждение, без пин-кода)
Т.е. метод генерирует токен и шлет на почту ссылку. Пока ссылка на сервере - то все ок, но когда приходит на почту, то target="_blank", хотя с сервера я отсылаю явно target="_self"
Немного кода непомешает:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Register(RegisterModel model)
{
if (ModelState.IsValid)
{
ApplicationUser user = new ApplicationUser { UserName = model.Email, Email = model.Email, Year = model.Year };
//Если пытаемся ввести уже существующий E-mail!!!
ApplicationUser user2 = UserManager.Find(model.Email, model.Password);
if (user2 != null) // если есть!
{
ModelState.AddModelError("HasUserToDb", "Такой пользователь уже есть базе!");
return PartialView("Register");
}
IdentityResult result = UserManager.Create(user, model.Password);
if (result.Succeeded)
{
//генерим токен для подтверждения регистрации
var code = UserManager.GenerateEmailConfirmationToken(user.Id);
//создаем ссылку для подтверждения
var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
//шлем письмо +++ТУТ ПРОБЛЕМА с "_self"+++
string textEmail = "При регистрации учетной записи " + user.Email + " был указан Ваш email.<hr />Для завершения регистрации перейдите по ссылке: <a href=\"" + callbackUrl + "\" target=\"_self\">Завершить регистрацию</a>";
UserManager.SendEmail(user.Id, "Подтверждение электронной почты", textEmail);
return PartialView("ShowEmail");
//return JavaScript("OnSuccess();");
}
else //не создаст Юзера
{ . . .
Вот что уходит с сервера в результате выполнения Метода
А вот что приходит. Где что-то может идти не так?)
Обновление
@Эркин Итак, это все что есть:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Register(RegisterModel model)
{
if (ModelState.IsValid)
{
ApplicationUser user = new ApplicationUser { UserName = model.Email, Email = model.Email, Year = model.Year };
//Если пытаемся ввести уже существующий E-mail!!!
ApplicationUser user2 = UserManager.Find(model.Email, model.Password);
if (user2 != null) // если есть!
{
ModelState.AddModelError("HasUserToDb", "Такой пользователь уже есть базе!");
return PartialView("Register");
}
IdentityResult result = UserManager.Create(user, model.Password);
if (result.Succeeded)
{
//генерим токен для подтверждения регистрации
var code = UserManager.GenerateEmailConfirmationToken(user.Id);
//создаем ссылку для подтверждения
var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
//шлем письмо
string textEmail = "При регистрации учетной записи " + user.Email
+ " был указан Ваш email.<hr />Для завершения регистрации перейдите по ссылке: <a href=\"" + callbackUrl + "\">Завершить регистрацию</a>";
UserManager.SendEmail(user.Id, "Подтверждение электронной почты ", textEmail);
return PartialView("ShowEmail");
//return JavaScript("OnSuccess();");
}
else //не создаст Юзера
{ . . . }
. . .
И Собственно сам метод UserManager.SendMail,
который переопределен в EmailService : IIdentityMessageService
Вот он:
public class EmailService : IIdentityMessageService
{
public Task SendAsync(IdentityMessage message)
{
//настройка логина, пароля отправителяz
var from = "ZZZZZ@yandex.by";
var pass = "ZZZZZ33241";
//адрес и порт smtp - сервера, с которого мы и будем отправлять письмо
SmtpClient client = new SmtpClient("smtp.yandex.ru", 25);
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false; //управляет отправкой учетных данных DefaultCredentials вместе с запросами.
client.Credentials = new NetworkCredential(from, pass); //Возвращает или задает учетные данные, используемые для проверки подлинности отправителя.
client.EnableSsl = true; //Указывает, использует ли SmtpClient протокол SSL для шифрования подключения.
// создаем письмо: message.Destination - адрес получателя
var mail = new MailMessage(from, message.Destination); //Представляет сообщение электронной почты, которое может быть отправлено с помощью класса SmtpClient.
mail.Subject = message.Subject; //Получает или задает строку темы для данного сообщения электронной почты.
mail.Body = "<head><base target =\"_self\"></head>" + message.Body; //Получает или задает основную часть сообщения.
mail.IsBodyHtml = true; //Получает или задает значение, показывающее, имеет ли основная часть почтового сообщения формат HTML.
return client.SendMailAsync(mail); //Отправляет указанное сообщение SMTP-серверу для доставки в качестве асинхронной операции.9+
}
}
попробуйте target=\"_self\"
заменить на target='_self'
и в title вашей страницы не забудьте добавить
<base target="_blank">
Если не сработает, покажите ваш код UserManager.SendMail
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Читал на хабре статью про async/await и наткнулся на следующую строчку:
Мне необходимо показать пользователю представление, информация для отображении находится в разных таблицах
Нужно узнать текущие разрешение экрана(для полно экранного режима) и отдельно нужно узнать разрешение окна(оконный режим) Есть какие либо...