gpt4 book ai didi

authentication - 如何检查用户是否在 Service Stack Client 中经过身份验证?

转载 作者:行者123 更新时间:2023-12-02 21:33:50 26 4
gpt4 key购买 nike

我有自托管服务堆栈服务器。在客户端应用程序中,它是Windows窗体,我想在用户未经身份验证时显示登录表单。一种方法是尝试发送请求并捕获 WebServiceException,如 AuthTest 中所示。 .

我正在寻找客户端的 @if(Request.IsAuthenticated) ( SocialBootstrapApi 示例)等效项。

最佳答案

简短的回答是,无法在客户端上确定用户是否已通过身份验证,因为确定客户端是否已通过身份验证的状态存储在服务器上。

仅当存在 Authenticated Session stored in the Users session Id 时,用户才会通过身份验证。此 SessionId 通常在 HTTP 客户端 Cookie 中发送,在成功进行身份验证尝试后填充,例如:

var client = JsonServiceClient(BaseUrl);
var authResponse = client.Send(new Authenticate
{
provider = CredentialsAuthProvider.Name,
UserName = "user",
Password = "p@55word",
RememberMe = true,
});

您现在可以使用同一客户端(已填充 Cookie)向仅身份验证服务发出经过身份验证的请求。但请注意,如果服务器出于任何原因清除用户 session ,客户端将不再经过身份验证,并将抛出 401 未经授权的 HTTP 异常,此时他们必须重新进行身份验证。

MVC LiveDemo显示了使用 ajax 在客户端上进行身份验证和检索 Session 的示例,通过调用 /auth 来确定用户是否通过身份验证,例如:

$.getJSON("/api/auth", function (r) {
var html = "<h4 class='success'>Authenticated!</h4>"
+ "<table>"
+ $.map(r, function(k, v) {
return "<tr><th>" + v + "<th>"
+ "<td>"
+ (typeof k == 'string' ? k : JSON.stringify(k))
+ "</td></tr>";
}).join('')
+ "</table>";
$("#status").html(html);
}).error(function () {
$("#status").html("<h4 class='error'>Not Authenticated</h4>");

C# 的等价物是:

try
{
var response = client.Get(new Authenticate());
//Authenticated
}
catch (WebServiceException)
{
//Not Authenticated
}

关于authentication - 如何检查用户是否在 Service Stack Client 中经过身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21841214/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com