|
@@ -29,18 +29,24 @@ public class LoginRequiredMiddleware
|
|
|
context.Response.Headers.CacheControl = "no-store";
|
|
context.Response.Headers.CacheControl = "no-store";
|
|
|
if (IsAjaxRequest(context.Request))
|
|
if (IsAjaxRequest(context.Request))
|
|
|
{
|
|
{
|
|
|
|
|
+ // Ajax: quay lại trang đang đứng (Referer) sau khi đăng nhập trên trình duyệt.
|
|
|
|
|
+ var redirectUrl = AccessChannelHelper.GetLoginRedirectUrl(context, GetLocalReferer(context.Request));
|
|
|
context.Response.StatusCode = StatusCodes.Status401Unauthorized;
|
|
context.Response.StatusCode = StatusCodes.Status401Unauthorized;
|
|
|
context.Response.Headers["X-Login-Required"] = "true";
|
|
context.Response.Headers["X-Login-Required"] = "true";
|
|
|
|
|
+ context.Response.Headers["X-Login-Redirect"] = redirectUrl;
|
|
|
await context.Response.WriteAsJsonAsync(new
|
|
await context.Response.WriteAsJsonAsync(new
|
|
|
{
|
|
{
|
|
|
success = false,
|
|
success = false,
|
|
|
errorCode = Common.CommonErrorCode.LoginRequired,
|
|
errorCode = Common.CommonErrorCode.LoginRequired,
|
|
|
- redirectUrl = "mytel://back"
|
|
|
|
|
|
|
+ redirectUrl
|
|
|
});
|
|
});
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- context.Response.Redirect("mytel://back");
|
|
|
|
|
|
|
+ var returnUrl = context.Request.Method == HttpMethods.Get
|
|
|
|
|
+ ? $"{context.Request.PathBase}{context.Request.Path}{context.Request.QueryString}"
|
|
|
|
|
+ : null;
|
|
|
|
|
+ context.Response.Redirect(AccessChannelHelper.GetLoginRedirectUrl(context, returnUrl));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private static bool ShouldSkip(HttpContext context)
|
|
private static bool ShouldSkip(HttpContext context)
|
|
@@ -59,6 +65,19 @@ public class LoginRequiredMiddleware
|
|
|
return false;
|
|
return false;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ private static string? GetLocalReferer(HttpRequest request)
|
|
|
|
|
+ {
|
|
|
|
|
+ var referer = request.Headers.Referer.ToString();
|
|
|
|
|
+ if (string.IsNullOrWhiteSpace(referer)
|
|
|
|
|
+ || !Uri.TryCreate(referer, UriKind.Absolute, out var uri)
|
|
|
|
|
+ || !string.Equals(uri.Host, request.Host.Host, StringComparison.OrdinalIgnoreCase))
|
|
|
|
|
+ {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return uri.PathAndQuery;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
private static bool IsAjaxRequest(HttpRequest request)
|
|
private static bool IsAjaxRequest(HttpRequest request)
|
|
|
{
|
|
{
|
|
|
return string.Equals(request.Headers["X-Requested-With"], "XMLHttpRequest", StringComparison.OrdinalIgnoreCase)
|
|
return string.Equals(request.Headers["X-Requested-With"], "XMLHttpRequest", StringComparison.OrdinalIgnoreCase)
|