【问题标题】:How to make sure a user completes their profile in aspnet core 2.0?如何确保用户在 aspnet core 2.0 中完成他们的个人资料?
【发布时间】:2017-10-17 14:21:36
【问题描述】:

我是 aspnet core 2.0 的新手,我想要完成的是将尚未完成其个人资料的用户重定向到他们可以这样做的页面。我正在为身份服务器使用带有用户身份验证的默认模板。

我曾尝试使用中间件,但我重定向到的页面显示为空白。这是最好的方法还是有人可以帮助使它起作用。这是我的中间件。

public class FarmProfileMiddleware
{
    private readonly RequestDelegate next;

    public FarmProfileMiddleware(RequestDelegate next)
    {
        this.next = next;

    }

    public async Task Invoke(HttpContext context, UserManager<ApplicationUser> userManager)
    {
        var user = await userManager.GetUserAsync(context.User);
        if (user != null)
        {
            if (!user.EmailConfirmed && !context.Request.Path.ToString().Contains("profile"))
            {
                var url = context.Request.PathBase + "/Users/Profile";
                context.Response.Redirect(url);    
            }
        }
        else
        {
            await next(context);
        }
    }
}

提前致谢。

【问题讨论】:

  • 仅查看代码中的当前逻辑,我注意到如果用户不为 null 并且其配置文件已完成,则会使调用短路。您需要添加该逻辑。这可能是 X-Y 问题
  • 嗨@Nkosi,感谢您的快速回复。我已经删除了 else 条件,只是在 if 语句之后调用了await next(context);,我仍然得到一个空白页。

标签: c# authentication .net-core middleware


【解决方案1】:

仅查看代码中的当前逻辑,我注意到如果用户不为 null 并且其配置文件已完成,则会使调用短路。您需要添加该逻辑。

试试下面的

var user = await userManager.GetUserAsync(context.User);
if (user != null && !user.EmailConfirmed && !context.Request.Path.ToString().Contains("profile")) { 
    var url = context.Request.PathBase + "/Users/Profile";
    context.Response.Redirect(url);            
} else {
    await next(context);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-04
    • 2020-11-27
    • 2012-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-10
    • 1970-01-01
    相关资源
    最近更新 更多