asp.net - ASP.NET Core 5 MVC - Google Auth 不起作用 - 执行登录后没有任何反应
问题描述
在我登录后 - 什么也没发生,我按照本教程进行操作:https ://docs.microsoft.com/en-us/aspnet/core/security/authentication/social/google-logins?view=aspnetcore-5.0
我读了一些关于令牌的东西..但我没有任何访问权限,它也没有显示在屏幕上或其他东西上。我想也许有一个选项可以在我的 .cshtml 中执行 if() 语句,这样我就可以检查用户是否登录到他的谷歌帐户。
当然,此代码不适用于 Google 身份验证:
@if ((User.Identity.IsAuthenticated) || (Context.User != null && Context.User.Claims != null && Context.User.Claims.Count() > 0))
{
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-controller="Categories" asp-action="Index">Categories</a>
</li>
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-controller="Restaurants" asp-action="Index">Restaurants</a>
</li>
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-controller="Dishes" asp-action="Index">Dishes</a>
</li>
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-controller="Users" asp-action="Index">Users</a>
</li>
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-controller="Cities" asp-action="Index">Cities</a>
</li>
}
else
{
<li class="nav-item">
<a class="nav-link text-dark" type="button" data-bs-toggle="modal" data-bs-target="#LoginModal">Categories</a>
</li>
<li class="nav-item">
<a class="nav-link text-dark" type="button" data-bs-toggle="modal" data-bs-target="#LoginModal">Restaurants</a>
</li>
<li class="nav-item">
<a class="nav-link text-dark" type="button" data-bs-toggle="modal" data-bs-target="#LoginModal">Dishes</a>
</li>
<li class="nav-item">
<a class="nav-link text-dark" type="button" data-bs-toggle="modal" data-bs-target="#LoginModal">Users</a>
</li>
<li class="nav-item">
<a class="nav-link text-dark" type="button" data-bs-toggle="modal" data-bs-target="#LoginModal">Cities</a>
</li>
}
@if ((User.Identity.IsAuthenticated) || (Context.User != null && Context.User.Claims != null && Context.User.Claims.Count() > 0))
{
<div class="dropdown">
<li class="text-dark dropdown-toggle" href="#" type="button" id="dropdownMenuButton1" data-bs-toggle="dropdown">
Hello, @User.Identity.Name!
</li>
<ul class="dropdown-menu" aria-labelledby="dropdownMenuButton1">
<li><span class="dropdown-item-text">User Status: @Context.User.Claims.ToList()[1].Value</span></li>
<li><a class="dropdown-item" href="#">My Cart</a></li>
<li><a class="dropdown-item" href="#">Another action</a></li>
<li><a class="dropdown-item" asp-controller="Users" asp-action="Logout">Logout</a></li>
</ul>
</div>
}
else
{
<li class="nav-item nav-link text-dark" type="button" data-bs-toggle="modal" data-bs-target="#LoginModal">
Hello, Guest!
</li>
}
Startup.cs 代码
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.HttpsPolicy;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using FeedMe.Data;
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Identity;
namespace FeedMe
{
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddDbContext<FeedMeContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("FeedMeContext")));
//services.AddSession(options =>
//{
// options.IdleTimeout = TimeSpan.FromMinutes(10);
//});
services.AddDbContext<FeedMeContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("FeedMeContext")));
services.AddDefaultIdentity<IdentityUser>(options =>
options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores<FeedMeContext>();
services.AddRazorPages();
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options =>
{
options.LoginPath = "/Users/Login";
options.AccessDeniedPath = "/Users/AccessDenied";
})
.AddGoogle(options =>
{
options.ClientId = Configuration["Authentication:Google:ClientId"];
options.ClientSecret = Configuration["Authentication:Google:ClientSecret"];
options.AccessDeniedPath = "/Users/AccessDenied";
})
;
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
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.UseSession();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
}
}
}
应用设置.json
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"FeedMeContext": "XXXXXX"
},
"Authentication": {
"Google": {
"ClientId": "XXXX",
"ClientSecret": "YYYY"
}
}
}
但它确实适用于我之前构建的常规 cookie 登录和注册
解决方案
推荐阅读
- xml - 如何根据属性获取多个代码的计数
- python - 为什么 pandas 的 apply 方法没有一个 axis=None 选项来将函数应用于整个数据框?
- java - 如何使用 Apache Camel Netty4 在异步模式下通过已建立的 TCP 连接发回响应?
- ios - 安全区域不移动物品
- batch-file - 根据输入参数的数量在批处理脚本中循环
- corda - 实施法律散文模板
- linux - 在linux上安装red5的问题
- java - 等待 / notifyAll 没有按预期工作
- java - 为 Spring Boot 2.0 acuator 框架配置安全性
- php - 下订单前的 WooCommerce 电话号码验证