我正在使用Identity 2.0示例。
我通过在ExternalLoginCallback操作方法中将isPersistent设置为true来获得该功能,浏览器将在下次使用相同浏览器访问时(在限制范围内)自动记录用户。我知道,如果用户记得我"捕获了首选项并将其传递给ExternalLogin操作方法,该方法可以放入returnUrl并在ExternalLoginCallback中访问。但是我如何获得他们对ExternalLogin操作方法的偏好?
在这种情况下,我不知道如何在LoginView页面上放置一个复选框并连接起来,以便我可以在ExternalLogin操作方法中处理它。我怎么能做到这一点?
答案 0 :(得分:4)
查看AccountController.ExternalLoginConfirmation
操作,并记下对await SignInHelper.SignInAsync(user, isPersistent: false, rememberBrowser: false)
的来电。您可以将这些值设置为true,也可以更新ExternalLoginConfirmationViewModel
和相应的ExternalLoginConfirmation
视图,以便用户决定。
顺便说一句:isPersistent
将持续关闭用户会话并重新打开浏览器。 rememberBrowser
参数特别适用于双因素身份验证,听起来应该因为您的情况而假。
答案 1 :(得分:1)
不要删除任何代码,只需更改如下:
在AccountViewModels中,编辑以匹配:
public class ExternalLoginViewModel
{
public string Action { get; set; }
public string ReturnUrl { get; set; }
public string RemembermeExtnl { get; set; }
}
在帐户控制器中,编辑以匹配:
public ActionResult Login(string returnUrl)
{
ViewBag.ReturnUrl = returnUrl;
ViewBag.RemembermeExtnl = "f";
return View();
}
public ActionResult ExternalLogin(string provider, string returnUrl, string remembermeExtnl)
{
// Request a redirect to the external login provider
return new ChallengeResult(provider, Url.Action("ExternalLoginCallback", "Account", new { ReturnUrl = returnUrl, remembermeExtnl = remembermeExtnl }));
}
public async Task<ActionResult> ExternalLoginCallback(string returnUrl, string remembermeExtnl)
{
...
var result = await SignInHelper.ExternalSignIn(loginInfo, isPersistent: remembermeExtnl=="t");
...
}
在“登录”视图中,编辑以匹配:
<section id="socialLoginForm">
@Html.Partial("_ExternalLoginsListPartial", new PG.Models.ExternalLoginViewModel() { Action = "ExternalLogin", ReturnUrl = ViewBag.ReturnUrl, RemembermeExtnl = ViewBag.RemembermeExtnl })
<input type="checkbox" id="cbxRemExt" /> Remember me
</section>
在“登录”视图中,添加以下内容:
<script>
// ** change to eq(1) (2 places!) if your social login form is the second form on the page,
// keep as below if first form is your social login form **
$("#cbxRemExt").change(function () {
var isChecked = $(this).is(":checked");
var actionstring = $('form').eq(0).attr('action');
actionstring = actionstring.replace('RemembermeExtnl=' + (isChecked ? 'f' : 't'), 'RemembermeExtnl=' + (isChecked ? 't' : 'f'))
$('form').eq(0).attr('action', actionstring);
});
</script>
在_ExternalLoginListPartial中:
string action = Model.Action;
string returnUrl = Model.ReturnUrl;
string remembermeExtnl = Model.RemembermeExtnl;
using (Html.BeginForm(action, "Account", new { ReturnUrl = returnUrl, RemembermeExtnl = remembermeExtnl }))