登录身份验证始终返回 true
Posted
技术标签:
【中文标题】登录身份验证始终返回 true【英文标题】:Login authentication always returning true 【发布时间】:2012-03-09 09:55:53 【问题描述】:我的代码正在查询服务器,如果用户和密码正确,则返回“+”字符。否则不会。不好的做法,但我只是用这个想法来学习我是初学者的 C# 和 ASP.NET(我以前用 JSP 编写过程序)。
我的问题:
目前,我似乎有一些错误导致我的方法 总是返回真。这不应该是这样。它应该只是 当用户名/密码通过身份验证时为 true。 我希望它仅在用户未登录时才显示登录表单 并且会话尚未开始-适应我的最佳方法是什么 执行此操作的代码?到目前为止我的代码:
@
// Initialize general page variables
string username = "";
string password = "";
bool rememberMe = false;
// Validation
bool isValid = true;
// If this is a POST request, validate and process data
if (IsPost)
username = Request.Form["username"];
password = Request.Form["password"];
rememberMe = Request.Form["remember"].AsBool();
// Attempt to login to the external authentication server
if(isValid)
using (TcpClient client = new TcpClient("hosty.host.com", 110))
using (NetworkStream stream = client.GetStream())
using (StreamReader reader = new StreamReader(stream))
using (StreamWriter writer = new StreamWriter(stream))
writer.WriteLine("USER " + username );
writer.WriteLine("PASS " + password );
string response = reader.ReadLine();
isValid = response[ 0 ] == '+';
Response.Write(response);
writer.WriteLine("quit\n");
if (isValid)
<text>IT WORKED---></text>
//USER LOGGED IN/ SESSION STARTED
else
<text>IT DIDNT WORK :( </text>
//USER NOT LOGGED IN, SESSION NOT STARTED
<h2>Login Here</h2>
<form action="" method="post">
<fieldset>
<legend>Login Form</legend>
<label for="username">Username:
<input type="text" name="username" id="username" value="" />
</label>
<label for="password">Password:
<input type="password" name="password" id="password" value="" />
</label>
<label for="remember">
<input class="checkbox" type="checkbox" name="remember" id="remember" checked="checked" />
Remember me</label>
<p>
<input type="submit" name="login" id="login" value="Login" />
<input type="reset" name="reset" id="reset" value="Reset" />
</p>
</fieldset>
</form>
</div>
</fieldset>
</form>
【问题讨论】:
请避免在问题标题中包含C#/Razor/ASP.NET
之类的内容。这就是标签的用途。
您可以堆叠使用语句(嵌套语句),因此不需要那么多组大括号。
【参考方案1】:
您从isValid=true
开始,但如果您的程序甚至无法连接到服务器,isValid
仍然为真。
所以也许您的用户甚至根本没有验证,即使验证未完成,您也可以从 isValid 开始并以相同的方式结束。
代码原样,我以false开头,去掉一行。
// Validation
bool isValid = false;
// If this is a POST request, validate and process data
if (IsPost)
username = Request.Form["username"];
password = Request.Form["password"];
rememberMe = Request.Form["remember"].AsBool();
// Attempt to login to the external authentication server
// if(isValid)
using (TcpClient client = new TcpClient("hosty.host.com", 110))
using (NetworkStream stream = client.GetStream())
using (StreamReader reader = new StreamReader(stream))
using (StreamWriter writer = new StreamWriter(stream))
writer.WriteLine("USER " + username );
writer.WriteLine("PASS " + password );
string response = reader.ReadLine();
isValid = response[ 0 ] == '+';
Response.Write(response);
writer.WriteLine("quit\n");
if (isValid)
<text>IT WORKED---></text>
//USER LOGGED IN/ SESSION STARTED
else
<text>IT DIDNT WORK :( </text>
//USER NOT LOGGED IN, SESSION NOT STARTED
还要注意 Page.IsValid
是 Web 表单上的现有参数。
【讨论】:
(笑话:如果登录身份验证总是返回 true,那么将重要信息显示给未通过身份验证的用户 :) 哈哈,是的,这是我完整程序的(略微)缩减版。我在完整版中附加了一些更多信息。我现在已经适应使用您的更改,但不幸的是它仍然总是说它已经过身份验证(打印“IT WORKS!”)! @SimonKiely 你能调试你的代码看看返回时有什么响应吗? 我正在尝试这样做(Response.Write(response); 在我上面的代码中)但屏幕上没有呈现任何内容。显示此代码的最佳方式是什么?抱歉,我知道这个愚蠢的问题,但我才刚刚开始 C#。 好的,我有一个新错误。响应字符串保持“+OK Dovecot 就绪。”。我相信这只是表明 POP3 服务器已准备好接受连接,但它没有提供任何身份验证?如果我尝试调用'reader.ReadLine();'多次,我进入一个无限循环。有什么想法吗?以上是关于登录身份验证始终返回 true的主要内容,如果未能解决你的问题,请参考以下文章
JWT 身份验证始终返回 401 HTTP 错误 asp.net core
Laravel Passport身份验证问题:始终返回未经身份验证的身份