在弹出窗口中使用 Owin 外部登录的 Asp.net 登录提供程序
Posted
技术标签:
【中文标题】在弹出窗口中使用 Owin 外部登录的 Asp.net 登录提供程序【英文标题】:Asp.net Login providers by using Owin external login In a Pop Up Window 【发布时间】:2015-10-14 18:33:23 【问题描述】:我正在使用带有 Owin 外部登录的 MVC。
Owin 不会将登录作为弹出窗口打开。 它将页面重定向到该登录提供程序。
例如 如果我想通过 facebook 登录,它不会在弹出窗口中打开 facebook 登录,而是重定向到 facebook 登录页面。
到目前为止,我发现我必须为 Facebook 创建一个身份验证提供程序。所以创建一个继承自 FacebookAuthenticationProvider 的类。在这个类中,重写“ApplyRedirect”方法。
这是我的示例代码:
public class FacebookProvider : FacebookAuthenticationProvider
public override void ApplyRedirect(FacebookApplyRedirectContext context)
context.Response.Redirect(context.RedirectUri + "&display=popup");
我将这段代码连接到我的 startup.auth.cs 类中,如下所示:
app.UseFacebookAuthentication(new FacebookAuthenticationOptions
Provider = new FacebookProvider(),
AppId = "xxxxxxxxxx",
AppSecret = "647e05af9188a8a3ccd0793aae9a846f",
Scope = "email" ,
SignInAsAuthenticationType = Microsoft.Owin.Security.AppBuilderSecurityExtensions.GetDefaultSignInAsAuthenticationType(app)
);
而我的 _ExternalLoginListPartial.cshtml 是这样的:
@using Microsoft.Owin.Security
<h4>Use another service to log in.</h4>
<hr />
@
var loginProviders = Context.GetOwinContext().Authentication.GetExternalAuthenticationTypes();
if (loginProviders.Count() == 0)
<div>
<p>
There are no external authentication services configured. See <a href="http://go.microsoft.com/fwlink/?LinkId=403804">this article</a>
for details on setting up this ASP.NET application to support logging in via external services.
</p>
</div>
else
using (Html.BeginForm("ExternalLogin", "CustomerAccount", new ReturnUrl = Model.ReturnUrl ))
@Html.AntiForgeryToken()
<div id="socialLoginList">
<p>
@foreach (AuthenticationDescription p in loginProviders)
<button type="submit" class="btn btn-default" id="@p.AuthenticationType" name="provider" value="@p.AuthenticationType" title="Log in using your @p.Caption account">@p.AuthenticationType</button>
</p>
</div>
所以如果有什么办法可以解决我的问题..我花了大约 5 天时间来解决这个问题..
【问题讨论】:
有什么问题?如果你不能使用弹出窗口,那就不要。只需提供redirect_uri
参数,Facebook 将在流程完成后重定向回您的应用程序。见this。
其实我的要求是使用弹窗
我已经使用redirect_uri 实现了,并且成功完成了,..
我的建议有帮助吗?如果是这样,我会将其添加为您接受的答案。
我已经尝试了你的建议..它很符合我的要求..
【参考方案1】:
您现在正在做的是告诉 Facebook 显示登录页面,就好像它在弹出窗口中一样。你没有做任何事情来实际上显示一个弹出窗口。
如果您要将button
标签onclick
事件连接到此函数:
<button onclick="return loginPopup('@Model.MyUrl');">My button</button>
function loginPopup(url)
var w = window.open(url,'name','height=200,width=150');
if (window.focus)
w.focus();
return false;
然后,我们会更接近一些工作。
【讨论】:
以上是关于在弹出窗口中使用 Owin 外部登录的 Asp.net 登录提供程序的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 iOS 的 phonegap 在弹出窗口中打开 PDF 文件