为什么 signinmanager getexternallogininfoasync 方法总是返回 null?
我将 VS2015 与默认的 asp.net 核心(不是框架)项目一起用于具有个人用户帐户的 MVC (这是一项要求)。使用第三方登录的目的是让用户自行注册。基于角色的授权将由 asp.net 标识使用通过 Azure AD 注册时提供的标识进行处理。
如果以下对登录经理的解释不正确,请纠正我。此方法应提供有关外部登录的详细信息,并返回一个 claimprincipal 对象,其中包含用户提供的身份提供者提供的声明。
我使用以下指南在我的 Startup.cs(下面的类部分)中设置 OpenIdConnectAuthentication
当我启动外部登录提供程序时,它会将我定向到组织登录页面并成功。
但是,应由 signinmanager 方法填充的变量信息为 null
如果我在回调类中放置一个断点,则会填充 User 并且 IsAuthenticated 变量为 true。
我可以驱动允许用户自己在应用程序中注册的功能,但是,这是我第一次尝试实现第三方登录,我想了解在这一点上我做错了什么。
启动文件
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddApplicationInsightsTelemetry(Configuration);
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
// Add Authentication services.
services.AddAuthentication(sharedOptions => {
sharedOptions.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
});
//services.AddDistributedMemoryCache();
//services.AddSession();
services.AddMvc();
// Add application services.
services.AddTransient<IEmailSender, AuthMessageSender>();
services.AddTransient<ISmsSender, AuthMessageSender>();
}
// This …Run Code Online (Sandbox Code Playgroud) 我正在使用 tkinter 学习 Python GUI 编程。我想使用网格几何管理器在根窗口中放置一个框架,指定高度,并将框架扩展到根窗口的整个宽度。我尝试使用粘性选项来执行此操作,但这不会产生所需的结果。如何在不手动指定宽度的情况下使框架扩展到窗口的整个宽度?
代码:
import tkinter
import tkinter.ttk
win = tkinter.Tk()
win.geometry('600x600')
frame = tkinter.Frame(win, height=300)
frame.configure(bg='red')
frame.grid(column=0, sticky=tkinter.E + tkinter.W)
win.mainloop()
Run Code Online (Sandbox Code Playgroud)