enter image description here我正在尝试将Google登录实施到我的Web表单页面中,因为我们将G Suite用于业务。基本上,我正在使用javascript获取令牌,然后使用ajax将其发布到google api,然后我正在查看高清声明,以确保它们不属于我们的域,并在电子邮件后面的代码中发布并进行查找以获取用户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,但是停留在登录页面上,所以我陷入了无休止的循环中一遍又一遍地加载登录页面。
答案 0 :(得分:0)
是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();