Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Identityserver4 Identity Server 4注册后自动登录_Identityserver4 - Fatal编程技术网

Identityserver4 Identity Server 4注册后自动登录

Identityserver4 Identity Server 4注册后自动登录,identityserver4,Identityserver4,我希望用户在注册到MVC应用程序后自动登录(现在不需要电子邮件验证),我遵循了IdSrv3的此示例并编辑了一些部分: 以下是我的设置: MVC: 使用ASp.Net核心标识的Identity Server 4 [Authorize] public class AccountController : Controller { // // GET: /Account/Register [HttpGet] [AllowAn

我希望用户在注册到MVC应用程序后自动登录(现在不需要电子邮件验证),我遵循了IdSrv3的此示例并编辑了一些部分:

以下是我的设置:

MVC:

使用ASp.Net核心标识的Identity Server 4

[Authorize]
    public class AccountController : Controller
    {
       //
        // GET: /Account/Register
        [HttpGet]
        [AllowAnonymous]
        public IActionResult Register(string returnUrl = null)
        {
           ViewData["ReturnUrl"] = returnUrl;
           return View();
        }

    //
    // POST: /Account/Register
    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Register(RegisterViewModel model, string returnUrl = null)
    {
        ViewData["ReturnUrl"] = returnUrl;
        if (ModelState.IsValid)
        {
            var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
            var result = await _userManager.CreateAsync(user, model.Password);
            if (result.Succeeded)
            {
                var otac = user.GenerateOTAC(TimeSpan.FromMinutes(1));
                await _userManager.UpdateAsync(user);
                await _signInManager.SignInAsync(user, isPersistent: false);
                _logger.LogInformation(3, "User created a new account with password.");
                if (string.IsNullOrEmpty(returnUrl))
                {
                    return RedirectToAction(nameof(HomeController.Index), "Home");
                }
                else
                {
                    return Redirect(returnUrl);
                }
            }
            AddErrors(result);
        }

        // If we got this far, something failed, redisplay form
        return View(model);
    }
}
[授权]
公共类AccountController:控制器
{
//
//获取:/Account/注册
[HttpGet]
[异名]
公共IActionResult寄存器(字符串返回URL=null)
{
ViewData[“ReturnUrl”]=ReturnUrl;
返回视图();
}
//
//职位:/Account/Register
[HttpPost]
[异名]
[ValidateAntiForgeryToken]
公共异步任务寄存器(RegisterViewModel模型,字符串returnUrl=null)
{
ViewData[“ReturnUrl”]=ReturnUrl;
if(ModelState.IsValid)
{
var user=newapplicationuser{UserName=model.Email,Email=model.Email};
var result=await\u userManager.CreateAsync(用户、模型、密码);
if(result.successed)
{
var otac=user.GenerateOTAC(TimeSpan.frommins(1));
wait_userManager.UpdateAsync(用户);
wait _signInManager.SignInAsync(用户,ispersist:false);
_logger.LogInformation(3,“用户使用密码创建了一个新帐户”);
if(string.IsNullOrEmpty(returnUrl))
{
返回重定向到操作(nameof(HomeController.Index),“Home”);
}
其他的
{
返回重定向(returnUrl);
}
}
加法器(结果);
}
//如果我们走到这一步,有些东西失败了,重新显示形式
返回视图(模型);
}
}
正如示例所示,我无法实现OTAC握手,因为IDSRV4中不再有任何用户服务

该场景的工作原理如下:

1-用户在MVC应用程序中单击“注册”,然后重定向到IdSrv帐户->注册并传递MVC身份->作为返回URI登录。 2-用户在IdSrv中完成注册后,执行另一个重定向以返回MVC Auth->Login。 3-MVC Auth->Login创建了一个挑战,由于用户已经使用cookie在注册过程中登录,身份验证cookie被合并(根据IdSrv日志),并且没有出现登录屏幕,现在用户登录并登录到MVC应用程序

此设置是否存在任何安全缺陷?是否有任何方法可以在IdSrv4中实现OTAC握手


谢谢,

在你的情况下,也许这可以奏效

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Register(RegisterViewModel model, string returnUrl = null)
{
    ViewData["ReturnUrl"] = returnUrl;
    if (ModelState.IsValid)
    {
        var user = new ApplicationUser { UserName = model.Email, Email = model.Email 
        var result = await _userManager.CreateAsync(user, model.Password);
        if (result.Succeeded)
        {
            await _signInManager.SignInAsync(user, isPersistent: false);
            return LocalRedirect(returnUrl);
        }
        AddErrors(result);
    }

    // If we got this far, something failed, redisplay form
    return View(model);
}
[HttpPost]
[异名]
[ValidateAntiForgeryToken]
公共异步任务寄存器(RegisterViewModel模型,字符串returnUrl=null)
{
ViewData[“ReturnUrl”]=ReturnUrl;
if(ModelState.IsValid)
{
var user=new ApplicationUser{UserName=model.Email,Email=model.Email
var result=await\u userManager.CreateAsync(用户、模型、密码);
if(result.successed)
{
wait _signInManager.SignInAsync(用户,ispersist:false);
返回LocalRedirect(returnUrl);
}
加法器(结果);
}
//如果我们走到这一步,有些东西失败了,重新显示形式
返回视图(模型);
}

您是否设法解决了此问题?能否共享代码?
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Register(RegisterViewModel model, string returnUrl = null)
{
    ViewData["ReturnUrl"] = returnUrl;
    if (ModelState.IsValid)
    {
        var user = new ApplicationUser { UserName = model.Email, Email = model.Email 
        var result = await _userManager.CreateAsync(user, model.Password);
        if (result.Succeeded)
        {
            await _signInManager.SignInAsync(user, isPersistent: false);
            return LocalRedirect(returnUrl);
        }
        AddErrors(result);
    }

    // If we got this far, something failed, redisplay form
    return View(model);
}