javascript - c#方法中的重定向不起作用
问题描述
在此处输入图像描述我正在尝试在我的 Web 表单页面中实现 Google 登录,因为我们使用 G Suite 进行业务。基本上我使用 javascript 来获取令牌,然后使用 ajax 发布到 google api 然后我正在查看 HD 声明以确保它们是我们域的一部分,然后发布到电子邮件后面的代码并进行查找以获取用户 ID 然后设置表单 cookie 并尝试重定向到我们的默认页面。所以我们有一个 mvc 应用程序,我用它完成了这个确切的事情,它完美地工作我只是将它们路由到控制器。出于某种原因,我似乎没有从代码背后的代码中得到任何东西。
这是我的javascript。
<script>
function onSignIn(googleUser) {
debugger;
const profile = googleUser.getBasicProfile();
let boolRedirectUrl = false;
const id_token = googleUser.getAuthResponse().id_token;
const pathname = window.location.pathname;
const url = window.location.href;
let redirectPath = "";
if (window.location.href.indexOf("ReturnUrl") > -1) {
boolRedirectUrl = true;
redirectPath = readQueryString("ReturnUrl");
}
const googleUrl = "https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=" + id_token;
$.ajax({
url: googleUrl,
dataType: 'json',
data: '{}',
contentType: 'application/json',
success: (data, status, xhr) => {
const domain = data.hd;
const email = data.email;
if (domain === "kimbelmechanical.com") {
$.ajax({
url: "Login.aspx/GoogleLogin",
type: "POST",
data: { 'email': email },
success: (data, status, xhr) => {
//window.location.href = "Default.aspx"
},
error: (xhr, status, error) => {
console.log("I stopeed on the call to controller " + status);
}
});
}
},
error: (xhr, status, error) => {
console.log(status);
}
});
};
function readQueryString(key) {
key = key.replace(/[*+?^$.\[\]{}()|\\\/]/g, "\\$&");
var match = location.search.match(new RegExp("[?&]" + key + "=([^&]+)(&|$)"));
return match && decodeURIComponent(match[1].replace(/\+/g, " "));
}
</script>
这是我背后的 c# 代码。
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public void GoogleLogin(string email)
{
string userID = "";
using (var context = new KPDataContext(KP.Common.KPConnectionString))
{
var user = context.Employees.Where(p => p.Email == email);
foreach (var e in user)
{
userID = e.Username;
}
}
if (userID != "")
{
FormsAuthentication.SetAuthCookie(userID, false);
Response.Redirect("~/Default.aspx", true);
}
}
如果我从成功重定向到我的默认页面,它会加载它找到 default.aspx 但由于某种原因它会 login.aspx?ReturnUrl=?default.aspx 但停留在登录页面上,所以我处于加载登录的无限循环中一遍又一遍的页面。
解决方案
是MVC吗?如果是这样,您可以使用 RouteData 以及创建控制器的新实例。然后,该控制器可以使用新路径执行新的 Web 请求,如下所示:
var routeData = new RouteData();
routeData.Values.Add("message", errorModel.message);
routeData.Values.Add("action", "Index");
routeData.Values.Add("controller", "ErrorPage");
IController ctrl = new ErrorController();
ctrl.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));
Response.End();
推荐阅读
- laravel - VueDraggable 和 Laravel
- google-cloud-platform - 向 Google Cloud Tasks 添加任务时 DEADLINE_EXCEEDED
- sed - 用 sed 替换第一个单词,保持空格对齐
- angular - Angular如何在RouterLinkActive上将所有链接设置为不同的颜色
- django - Django 在 values_list 中检索 get_foo_value 并注释查询
- jmeter - 命令行上的 Jmeter 总结报告
- javascript - 表单提交时未执行 Jquery 函数
- apache-spark - 基于具有连续值 Spark 数据框的现有列添加新列
- python - 有没有办法转换一个 numpy 数组或 pytorch 张量?
- node.js - Fastify 无法在 Docker / Kubernetes 上运行