/// <summary>
/// Three-party login callback
/// </summary>
/// <param name="id">Which company</param>
/// <param name="authResult">Receive authorization code</param>
/// <returns></returns>
[HttpGet]
public IActionResult AuthCallback([FromRoute] LoginWhich id, AuthorizeResult authResult)
{
//Value obtains end user information
var publicUser = (id, authResult);
var result = (true);
(result);
return Ok(result);
}
/// <summary>
/// Three-party login callback, information on all steps
/// </summary>
/// <param name="id">Which company</param>
/// <param name="authResult">Receive authorization code</param>
/// <returns></returns>
[HttpGet]
public IActionResult AuthCallback_Steps([FromRoute] LoginWhich id, AuthorizeResult authResult)
{
//Include step information
(DocModel tokenResult, DocModel openidResult, DocModel userResult, PublicUserResult publicUser) = (id, authResult);
var result = new
{
tokenResult,
openidResult,
userResult,
publicUser
}.ToJson(true);
(result);
return Ok(result);
}
/// <summary>
/// Three-party login callback, step by step
/// </summary>
/// <param name="id">Which company</param>
/// <param name="authResult">Receive authorization code</param>
/// <returns></returns>
[HttpGet]
public IActionResult AuthCallback_Step([FromRoute] LoginWhich? id, AuthorizeResult authResult)
{
try
{
if (id == null)
{
throw new Exception($" does not support authorization in this method {["id"]?.ToString()}");
}
else if (())
{
throw new Exception($"Authorization failed");
}
else
{
var loginType = ;
($"{}----- Sign in with {loginType} {:yyyy-MM-dd HH:mm:ss}{}");
//step: access token (non-old version DingTalk)
DocModel tokenResult = null;
//step: openid (QQ only)
DocModel openidResult = null;
//step: user (not Taobao)
DocModel userResult = null;
if (!(loginType == && ))
{
tokenResult = <AuthorizeResult, object>(loginType, , beforeResult: authResult);
($"{}{nameof()}");
((true));
//step: refresh token (optional, only supported)
if (!new[] { , , , }.Contains(loginType)
&& !(loginType == && ))
{
tokenResult = <DocModel, object>(loginType, , beforeResult: tokenResult);
($"{}{nameof()}");
((true));
}
}
if (loginType == )
{
openidResult = <DocModel, object>(loginType, , beforeResult: tokenResult);
userResult = <DocModel[], object>(loginType, , beforeResult: [tokenResult, openidResult]);
}
else if (loginType == && )
{
userResult = <object, AuthorizeResult>(loginType, , reqModel: authResult);
}
else if (loginType != )
{
userResult = <DocModel, object>(loginType, , beforeResult: tokenResult);
}
if (openidResult != null)
{
($"{}{nameof()}");
((true));
}
if (userResult != null)
{
($"{}{nameof()}");
((true));
}
return Ok("Done!");
}
}
catch (Exception ex)
{
(ex);
return BadRequest($"Authorization failed {}");
}
}
/// <summary>
/// Three-party login callback, customize the build request parameters
/// </summary>
/// <param name="code">Receive authorization code</param>
/// <returns></returns>
[HttpGet]
public IActionResult AuthCallback_GitHub(string code)
{
//step: access token
DocModel tokenResult = <object, GitHubAccessTokenModel>(, , reqModel: new GitHubAccessTokenModel()
{
Code = code
});
((true));
//step: user
DocModel userResult = <object, GitHubUserModel>(, , reqModel: new GitHubUserModel()
{
Access_Token = ("access_token")
});
((true));
return Content();
}
/// Three-party login callback
/// </summary>
/// <param name="id">Which company</param>
/// <param name="authResult">Receive authorization code</param>
/// <returns></returns>
[HttpGet]
public IActionResult AuthCallback([FromRoute] LoginWhich id, AuthorizeResult authResult)
{
//Value obtains end user information
var publicUser = (id, authResult);
var result = (true);
(result);
return Ok(result);
}
/// <summary>
/// Three-party login callback, information on all steps
/// </summary>
/// <param name="id">Which company</param>
/// <param name="authResult">Receive authorization code</param>
/// <returns></returns>
[HttpGet]
public IActionResult AuthCallback_Steps([FromRoute] LoginWhich id, AuthorizeResult authResult)
{
//Include step information
(DocModel tokenResult, DocModel openidResult, DocModel userResult, PublicUserResult publicUser) = (id, authResult);
var result = new
{
tokenResult,
openidResult,
userResult,
publicUser
}.ToJson(true);
(result);
return Ok(result);
}
/// <summary>
/// Three-party login callback, step by step
/// </summary>
/// <param name="id">Which company</param>
/// <param name="authResult">Receive authorization code</param>
/// <returns></returns>
[HttpGet]
public IActionResult AuthCallback_Step([FromRoute] LoginWhich? id, AuthorizeResult authResult)
{
try
{
if (id == null)
{
throw new Exception($" does not support authorization in this method {["id"]?.ToString()}");
}
else if (())
{
throw new Exception($"Authorization failed");
}
else
{
var loginType = ;
($"{}----- Sign in with {loginType} {:yyyy-MM-dd HH:mm:ss}{}");
//step: access token (non-old version DingTalk)
DocModel tokenResult = null;
//step: openid (QQ only)
DocModel openidResult = null;
//step: user (not Taobao)
DocModel userResult = null;
if (!(loginType == && ))
{
tokenResult = <AuthorizeResult, object>(loginType, , beforeResult: authResult);
($"{}{nameof()}");
((true));
//step: refresh token (optional, only supported)
if (!new[] { , , , }.Contains(loginType)
&& !(loginType == && ))
{
tokenResult = <DocModel, object>(loginType, , beforeResult: tokenResult);
($"{}{nameof()}");
((true));
}
}
if (loginType == )
{
openidResult = <DocModel, object>(loginType, , beforeResult: tokenResult);
userResult = <DocModel[], object>(loginType, , beforeResult: [tokenResult, openidResult]);
}
else if (loginType == && )
{
userResult = <object, AuthorizeResult>(loginType, , reqModel: authResult);
}
else if (loginType != )
{
userResult = <DocModel, object>(loginType, , beforeResult: tokenResult);
}
if (openidResult != null)
{
($"{}{nameof()}");
((true));
}
if (userResult != null)
{
($"{}{nameof()}");
((true));
}
return Ok("Done!");
}
}
catch (Exception ex)
{
(ex);
return BadRequest($"Authorization failed {}");
}
}
/// <summary>
/// Three-party login callback, customize the build request parameters
/// </summary>
/// <param name="code">Receive authorization code</param>
/// <returns></returns>
[HttpGet]
public IActionResult AuthCallback_GitHub(string code)
{
//step: access token
DocModel tokenResult = <object, GitHubAccessTokenModel>(, , reqModel: new GitHubAccessTokenModel()
{
Code = code
});
((true));
//step: user
DocModel userResult = <object, GitHubUserModel>(, , reqModel: new GitHubUserModel()
{
Access_Token = ("access_token")
});
((true));
return Content();
}