首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >显示或隐藏基于身份验证mvc core 3.1.9的某些html元素

显示或隐藏基于身份验证mvc core 3.1.9的某些html元素
EN

Stack Overflow用户
提问于 2020-10-26 19:07:10
回答 1查看 34关注 0票数 0

在我的网站上,我已经根据使用身份验证显示或隐藏了某些元素,但由于某些原因,这不起作用。请看下面的代码,如果单击登录按钮,登录操作将成功通过,但signInManager.IsSignedIn(用户)将返回false

startup.cs

代码语言:javascript
运行
复制
public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllersWithViews();
        services.AddDbContextPool<ApplicationDbContext>(option => option.UseSqlServer(Configuration.GetConnectionString("DBConnection")));

        services.AddIdentity<ApplicationUser, IdentityRole>(options =>
        {
            options.Password.RequiredLength = 8;
            options.Password.RequiredUniqueChars = 4;
            options.SignIn.RequireConfirmedEmail = false;
            options.Tokens.EmailConfirmationTokenProvider = "EmailConfirmation";
            options.Lockout.MaxFailedAccessAttempts = 5;
            options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(15);

        })
        .AddEntityFrameworkStores<ApplicationDbContext>()
        .AddDefaultTokenProviders()
        .AddTokenProvider<EmailConfirmationTokenProvider<ApplicationUser>>("EmailConfirmation");

        services.Configure<DataProtectionTokenProviderOptions>(o =>
                   o.TokenLifespan = TimeSpan.FromHours(5));

        services.Configure<EmailConfirmationTokenProviderOptions>(o =>
                    o.TokenLifespan = TimeSpan.FromDays(3));

        
        services.Configure<DataProtectionTokenProviderOptions>(o =>
                    o.TokenLifespan = TimeSpan.FromHours(5));

        services.Configure<EmailConfirmationTokenProviderOptions>(o =>
                    o.TokenLifespan = TimeSpan.FromDays(3));

        services.AddSingleton<DataProtectionPurposeStrings>();
    }

AccountController/登录

代码语言:javascript
运行
复制
[HttpPost]
    [AllowAnonymous]
    public async Task<IActionResult> Login(LoginViewModel model, string returnUrl)
    {
        

        if (ModelState.IsValid)
        {
            var user = await userManager.FindByEmailAsync(model.Email);             
            var result = await signInManager.PasswordSignInAsync(model.Email, model.Password, false, true);

            if (result.Succeeded)
            {
                if (!string.IsNullOrEmpty(returnUrl) && Url.IsLocalUrl(returnUrl))
                {
                    return Redirect(returnUrl);
                }
                else
                {
                    return RedirectToAction("index", "home");
                }
            }

            if (result.IsLockedOut)
            {
                return View("AccountLocked");
            }

            ModelState.AddModelError(string.Empty, "Invalid Login Attempt");
        }

        return View(model);
    }

和导航栏

代码语言:javascript
运行
复制
@inject SignInManager<ApplicationUser> signInManager;
<header dir="rtl">
    <nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
        <div class="container">
            <a class="navbar-brand" asp-area="" asp-controller="Home" asp-action="Index">Home</a>
            <button class="navbar-toggler" type="button" data-toggle="collapse" data-target=".navbar-collapse"
                    aria-controls="navbarSupportedContent"
                    aria-expanded="false" aria-label="Toggle navigation">
                <span class="navbar-toggler-icon"></span>
            </button>
            <div class="navbar-collapse collapse d-sm-inline-flex">
                <ul class="navbar-nav flex-grow-1">
                    <li class="nav-item">
                        <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Index">Link1</a>
                    </li>

                    <li class="nav-item">
                        <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Index">Link2</a>
                    </li>
                    @*<li class="nav-item">
                            <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a>
                        </li>*@
                </ul>
                <ul class="navbar-nav">

                    @if (signInManager.IsSignedIn(User))
                    {
                        <li class="nav-item">
                            <form method="post" asp-action="logout" asp-controller="account">
                                <button type="submit" class="nav-link btn btn-link py-0">
                                    Logout @User.Identity.Name
                                </button>
                            </form>
                        </li>
                    }
                    else
                    {
                        <li class="nav-item">
                            <a asp-action="login" asp-controller="account" class="nav-link text-dark">Login</a>
                        </li>
                    }

                </ul>
            </div>
        </div>
    </nav>
</header>

EN

回答 1

Stack Overflow用户

发布于 2020-10-26 21:39:54

IsAuthenticated适用于所有类型的ClaimsPrincipals,这些类型可能来自ASP.NET核心身份、社交或其他任何类型。对于ASP.NET身份,IsSignedIn是非常特定的。

这是一个有效的例子。

代码语言:javascript
运行
复制
@if (User.Identity.IsAuthenticated)
{
  <a class="button" asp-controller="Account" asp-action="Logout">Sign Out</a>
}
else
{
    <a class="button" asp-page="/Accounts/Login"> Sign in </a>
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64535918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档