= localStorage.getItem("returnUrl"); // if (returnUrl ! returnUrl="+returnUrl; // }else { window.location.href="/login"; // } $route.query.returnUrl; localStorage.removeItem("returnUrl"); if (returnUrl ! = undefined && returnUrl !=null && returnUrl ! = 'null') { localStorage.setItem("returnUrl",returnUrl); } // 查看sso server是否登录,如果登录带着
} 这里面可以拿到 ReturnUrl,那它是怎么过来的呢,我们需要在 Consent 的 view 表单 index.cshtml 里面把它填过了,至少需要一个比如 hidden 控件,它里面需要有一个 ReturnUrl index.cshtml <form asp-action="Index" method="post"> <input type="hidden" asp-for="<em>ReturnUrl</em> "/> 同时需要在 ConsentViewModel 中加入 ReturnUrl ConsentViewModel public string ReturnUrl { get; set; } 接着可以在 (request, client, resources); vm.ReturnUrl = returnUrl; return vm; 完成之后客户端就可以 index.cshtml 中展示的时候有一个隐藏的 ReturnUrl,它最终在 post 的时候会被包含到整个 Form 表单,所以我们可以在 ConsentController 的 Index 中拿到 viewModel 的 ReturnUrl 当我们点击
returnUrl=" + returnUrl.UrlEncode(), state, OAuthScope.snsapi_userinfo); returnUrl=" + returnUrl.UrlEncode(), state, OAuthScope.snsapi_base); return string.IsNullOrEmpty(returnUrl)) { return Redirect(returnUrl);
当前returnUrl:
@if (ViewData["returnUrl"] == null || ViewData["returnUrl"]
携带returnUrl后,页面最终会跳转到returnUrl对应页面,避免刷新页面导致code的错误。
= null) { returnUrl = returnUrl ?? await _signInManager.SignInAsync(user, isPersistent: false); //登录 return LocalRedirect(returnUrl = null) { returnUrl = returnUrl ?? /LoginWith2fa", new { ReturnUrl = returnUrl, RememberMe = Input.RememberMe }); } if ( = null) { return LocalRedirect(returnUrl); } else
-- #include virtual="inc/Func.asp" --> <% Dim returnUrl Session("user") = Request("user") Set returnUrl = Request("returnUrl") if returnUrl="" then returnUrl = "home.asp" end if '记日志 AppendFile "/log/log.txt" , Now() & ",user:"&Session("user") &",returnUrl:" & returnUrl Response.Redirect(returnUrl) %> 大概功能,就是接收参数,然后按需要生成Session,最后重定向到真正的功能页面,这样其它页面访问Session =" + returnUrl; Response.Redirect(sessoinHandlerUrl + "?"
returnUrl) { if (Url.IsLocalUrl(returnUrl)) return Redirect(returnUrl = null) { ViewData["ReturnUrl"] = returnUrl; return View(); = null) { ViewData["ReturnUrl"] = returnUrl; var identityUser = new = null) { ViewData["ReturnUrl"] = returnUrl; return View(); ="Account" asp-action="Login" asp-route-returnUrl="@ViewData["ReturnUrl"]" novalidate="novalidate"> 启动项目
+ 1); else return url; var arr = ""; var returnurl = ""; = ref) { returnurl = returnurl + arr[i].split('=')[0] + "=" + arr[i].split('=')[ + returnurl.substr(0, returnurl.length - 1); } else { arr = str.split(
string.IsNullOrEmpty(this.ReturnURL) && ! string.IsNullOrEmpty(userInfo.OpenId)) { if (this.ReturnURL.IndexOf > 0) { this.ReturnURL = this.ReturnURL + "&OpenId=" + userInfo.OpenId ; } else { this.ReturnURL = this.ReturnURL + "?
) { var request = await _identityServerInteractionService.GetAuthorizationContextAsync(returnUrl) (request.ScopesRequested); var vm = CreateConsentViewModel(request, client, resources); vm.ReturnUrl { _consentService = consentService; } [HttpGet] public async Task<IActionResult> Index(string returnUrl ) { var model = await _consentService.BuildConsentViewModel(returnUrl); if (model == null) var request = await _identityServerInteractionService.GetAuthorizationContextAsync(viewModel.ReturnUrl
= null) { if (ModelState.IsValid) { ViewData["ReturnUrl"] = returnUrl; var identityUser, new AuthenticationProperties { IsPersistent = true }); return RedirectToLoacl(returnUrl AccountController [HttpPost] public async Task<IActionResult> Login(LoginViewModel loginViewModel,string returnUrl ) { if (ModelState.IsValid) { ViewData["ReturnUrl"] = returnUrl; var user = await )) { return Redirect(returnUrl); }
// 登录成功,重新定向到跳转的页面
// Page.Response.Redirect(this.ReturnURL string.IsNullOrEmpty(this.ReturnURL) && ! > 0)
&nb
sp; {
this.ReturnURL = this.ReturnURL else
{
this.ReturnURL = this.ReturnURL + "?
= "/") { ViewData["ReturnUrl"] = returnUrl; return View(); } [HttpPost] [ValidateAntiForgeryToken] public async Task<IActionResult> Login(LoginViewModel model, string returnUrl { IsPersistent = model.RememberMe, RedirectUri = returnUrl Login.cshtml 视图,用于显示登录表单: @model LoginViewModel
ReturnUrl=%2Fgrants 我想要换成这样的效果: https://ids.neters.club/oauth2/authorize? ReturnUrl=%2Fgrants 如果说你已经会了呢,可以不用看了; 如果说自己想先动手实践一下,先关掉本文窗口; 如果两者都不是,就跟着我往下走吧,很简单。 默认为returnUrl LogoutIdParameter = "logoutId", //设置传递给注销页面的注销消息ID参数的名称。 缺省为logoutId ConsentReturnUrlParameter = "ReturnUrl", //设置传递给同意页面的返回URL参数的名称。 默认为returnUrl ErrorIdParameter = "errorId", //设置传递给错误页面的错误消息ID参数的名称。
@Autowired private WxMpService wxOpenService; /** * 微信开放平台授权登录 * * @param returnUrl returnUrl=http://www.imooc.com @GetMapping("/qrAuthorize") public String qrAuthorize(@RequestParam ("returnUrl") String returnUrl){ String url = "http://testdev.tunnel.qydev.com/sell/wechat/qrUserInfo //获取openid String openId = wxMpOAuth2AccessToken.getOpenId(); return "redirect:" + returnUrl returnUrl=http://www.imooc.com 出现如下图所示,地址栏变为:https://open.weixin.qq.com/connect/qrconnect?
4.添加跳转的action [HttpGet] public async Task<IActionResult> ExternalLogin(string provider, string returnUrl RedirectUri = Url.Action("ExternalLoginCallback"), Items = { { "returnUrl ", returnUrl } } }; // start challenge and roundtrip the return URL props.Items.Add = result.Properties.Items["returnUrl"]; if (_interaction.IsValidReturnUrl(returnUrl) || Url.IsLocalUrl (returnUrl)) { return Redirect(returnUrl); } return Redirect("~/"); } 我画了一张图来表示这个流程
.'); var returnUrl = $location.url(); $log.log('return url is ' + returnUrl); // event.preventDefault(); $location.path('/login').search({ returnUrl : returnUrl }); } } // 监听 $rootScope 的 $routeChangeStart 事件 $rootScope.
如果returnUrl不为空,建议接入方跳转到该returnUrl。 NSLog(@"%@",resultCode); // returnUrl 代表 第三方App需要跳转的成功页URL NSString* returnUrl = result[@"returnUrl"]; NSLog(@"第三方url----%@",returnUrl); //建议操作: 打开returnUrl
identityServerInteractionService = identityServerInteractionService; } Index public IActionResult Index(string returnUrl ) { var model = BuildConsentViewModel(returnUrl); if (model == null) { } return (model); } BuildConsentViewModel private async Task<ConsentViewModel> BuildConsentViewModel(string returnUrl ) { var request = await _identityServerInteractionService.GetAuthorizationContextAsync(returnUrl)
); } } ViewBag.returnUrl = returnUrl; return View(model); } ); } } ViewBag.returnUrl = returnUrl; return View(model); } Google 登陆的按钮: @using (Html.BeginForm("GoogleLogin", "Account")) { <input type="hidden" name="<em>returnUrl</em> " value="@ViewBag.<em>returnUrl</em>" /> <button class="btn btn-primary" type="submit">Google 账户登录 </button = returnUrl }) }; HttpContext.GetOwinContext().Authentication.Challenge(properties,