Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SignInManager.IsSignedIn(User) returns false

I’m working on a ASP.NET Core 3.1 Web Application project. I’ve used identity for authentication and I’ve installed Microsoft.AspNetCore.Identity.EntityFrameworkCore package on the project. Login code has been implemented like this:

public async Task<IActionResult> Login(LoginDto login, string returnUrl)
        {
            ViewData["ReturnUrl"] = returnUrl;
            if (ModelState.IsValid)
            {
                var result =
                    await _signInManager
                    .PasswordSignInAsync(login.Email, login.Password, login.RememberMe, false);

                if (result.Succeeded)
                {
                    if (Url.IsLocalUrl(returnUrl))
                    {
                        return Redirect(returnUrl);
                    }
                    else
                    {
                        return RedirectToAction("Index","Home");
                    }
                }
                else
                    ModelState.AddModelError(string.Empty, "Invalid login attemp.");
            }

            return View(login);
        }

And here’s how startup’s config is like:

 public void ConfigureServices(IServiceCollection services)
        { 
        services.AddDbContext<IdentityDbContext>
            (options => options.UseSqlServer(Configuration.GetConnectionString("MusicTutorialIdentityConnection")
            , optionsBuilder =>
         optionsBuilder.MigrationsAssembly("MusicTutorial.Mvc"))); 

            services.AddIdentity<IdentityUser, IdentityRole>()
                .AddEntityFrameworkStores<IdentityDbContext>()
                .AddDefaultTokenProviders();

        }
 public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
                app.UseHsts();
            }
            app.UseHttpsRedirection();
            app.UseStaticFiles();

            app.UseRouting();

            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");
            });
        }

The problem is that SignInManager.IsSignedIn(User) always returns false when I try to log in. Here are the_layout.chHtml codes where this method is called:

<header>
        <nav class="navbar navbar-expand-lg">
            <a class="navbar-brand" href="#">
                <img src="images/logo1.png">
            </a>
            <form class="form-inline my-2 my-lg-0 col-xs-12">
                <input class="form-control mr-sm-2" type="search" placeholder="چه چیزی میخوای یاد بگیری" aria-label="Search">
                <button class="btn btn-primary my-2 my-sm-0" type="submit">جستجو</button>
            </form>
            <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
                <span class="navbar-toggler-icon"></span>
            </button>

            <div class="collapse navbar-collapse" id="navbarSupportedContent">
                <ul class="navbar-nav mr-auto font-weight-bolder toGridNav">
                    <li class="nav-item">
                        <a class="nav-link" href="#">همکاری با ما</a>
                    </li>
                    @if (SignInManager.IsSignedIn(User))
                    {
                        <li>
                            <form asp-controller="Account" asp-action="Logout" role="form" method="post">
                                <input type="submit" value="Logout" />
                            </form>
                        </li>
                        <li class="nav-item cart">
                            <img src="images/ca.svg" height="30" alt="">
                        </li>
                        <li class="nav-item user">
                            <img src="images/us.svg" width="30" height="30" alt="">
                        </li>
                    }
                    else
                    {
                        <li class="nav-item">
                            <a asp-controller="Account" asp-action="Login" class="nav-link">ورود</a>
                        </li>
                        <li class="nav-item">
                            <a asp-controller="Account" asp-action="Register" class="nav-link">عضویت</a>
                        </li>
                    }

And here is an image of the browser:

enter image description here

like image 364
Hossein Avatar asked Mar 03 '23 13:03

Hossein


1 Answers

in your startup add this:

app.UseRouting();

app.UseAuthentication();//HERE~~~
app.UseAuthorization();

like image 74
outfox Avatar answered Mar 05 '23 17:03

outfox