String 从LINQ返回字符串

String 从LINQ返回字符串,string,linq-to-sql,login,String,Linq To Sql,Login,对于学校项目,我们必须创建一个需要登录的评估网站。 对于数据库连接,我选择了LINQ,因为它是新的,应该更容易/更好地使用 我通过以下方式创建了登录检查: public static Boolean Controle(int id, string wachtwoord) { DataClassesDataContext context = new DataClassesDataContext(); var loginGebruiker = from p in d

对于学校项目,我们必须创建一个需要登录的评估网站。 对于数据库连接,我选择了LINQ,因为它是新的,应该更容易/更好地使用

我通过以下方式创建了登录检查:

public static Boolean Controle(int id, string wachtwoord)
{
    DataClassesDataContext context = new DataClassesDataContext();

    var loginGebruiker =
        from p in dc.Gebruikers
        where p.GebruikerID == id
        where p.GebruikerWachtwoord == wachtwoord
        select p;


    return true;
}
现在我正在尝试创建一个“忘记密码”选项,在这里输入您的id并返回密码(稍后将通过电子邮件发送给您,不知道我将如何执行此操作,建议?)

我尝试了以下代码:

public static string Forgot(int id)
{
    var context = new DataClassesDataContext();

    var wachtwoordLogin = (
        from p in dc.Gebruikers
        where p.GebruikerID == id
        select p.GebruikerWachtwoord);

    return wachtwoordLogin.ToString();
}
页面上按钮后面的代码:

 lbl1.Text = Class1.Forgot(Convert.ToInt32(txt1.Text));
现在,当我输入第一个用户(1)的a id时,lbl1变为:

从中选择[t0].[Gebruikerwachtword] [dbo][Gebruiker]作为[t0]在哪里 [t0].[GebruikerID]=@p0

我不知道如何解决这个问题,我一直在到处寻找,我希望有人能帮助我

谢谢,
Thomas

LINQ使用延迟执行,因此您的“wachtwoordLogin”实际上只是“如何获取您的数据”。直到您应用运算符,LINQ才会真正尝试检索您的数据

你的第一句话:

var loginGebruiker = (
    from p in dc.Gebruikers
    where p.GebruikerID == id 
    where p.GebruikerWachtwoord == wachtwoord
    select p).FirstOrDefault()

if (loginGeruiker != null) {
   //Valid login
} else {
   // invalid
}
FirstOrDefault表示获取列表中的第一项,或不返回任何项

在其他情况下,您需要相同的东西:

 user =  wachtwoordLogin.FirstOrDefault();
进一步阅读:


对于您关于通过电子邮件发送忘记密码的问题,您是否考虑过实施golden questions算法?它简化了,并且做了同样的事情


基本上,注册时只需让他们回答一些问题,如果他们能够验证,允许他们重置密码

LINQ使用延迟执行,因此您的“wachtwoordLogin”实际上只是“如何获取您的数据”。直到您应用了运算符,LINQ才会真正尝试检索您的数据

你的第一句话:

var loginGebruiker = (
    from p in dc.Gebruikers
    where p.GebruikerID == id 
    where p.GebruikerWachtwoord == wachtwoord
    select p).FirstOrDefault()

if (loginGeruiker != null) {
   //Valid login
} else {
   // invalid
}
FirstOrDefault表示获取列表中的第一项,或不返回任何项

在其他情况下,您需要相同的东西:

 user =  wachtwoordLogin.FirstOrDefault();
进一步阅读:


对于您关于通过电子邮件发送忘记密码的问题,您是否考虑过实施golden questions算法?它简化了,并且做了同样的事情


基本上,注册时只需让他们回答一些问题,如果他们能够验证,允许他们重置密码

wachwoordLogin将是一个IQueryable,因此您可以使用
FirstOrDefault()
来获取它,如果找不到它,它将返回null:

(from p in dc.Gebruikers
 where p.GebruikerID == id
 select p.GebruikerWachtwoord).FirstOrDefault();

wachwoordLogin将是一个IQueryable,因此您可以使用
FirstOrDefault()
来获取它,如果找不到它,它将返回null:

(from p in dc.Gebruikers
 where p.GebruikerID == id
 select p.GebruikerWachtwoord).FirstOrDefault();
您输入您的id并返回密码

那么,如果任何知道用户名的人都能看到密码,那么拥有密码的意义何在?我知道这不是你想要的,但是对于一个刚开始编程的人来说,我觉得有责任指出这一点。您在这里创建的基本上是一个完全破坏的登录模型。任何人都不应该使用这样的系统

永远不要显示密码。不在屏幕上,不在电子邮件中,永远不会

密码,如果需要存储的话(Codinghoror最近在这方面发表了几篇好文章,提倡像OpenID这样的东西),应该以散列形式存储,并且基本上无法检索。当用户登录时,同样地对他们提供的密码进行散列(在到达应用程序代码后,在将其传输到系统中的任何其他地方之前),并将其与存储的散列版本进行比较

如果用户要求输入密码,则您没有密码。你不能把它给他。这是为了保护他。如果用户忘记了密码,则不向用户提供密码,而是向用户提供重置密码的方法(向文件中的地址发送一封电子邮件,其中包含一个临时可用的URL、一组验证其身份的“安全问题”等),以便用户可以输入新密码以覆盖旧密码。但是您不应该能够“显示”用户的密码,因为即使您作为系统管理员也不应该能够以任何可用的形式看到它

您输入您的id并返回密码

那么,如果任何知道用户名的人都能看到密码,那么拥有密码的意义何在?我知道这不是你想要的,但是对于一个刚开始编程的人来说,我觉得有责任指出这一点。您在这里创建的基本上是一个完全破坏的登录模型。任何人都不应该使用这样的系统

永远不要显示密码。不在屏幕上,不在电子邮件中,永远不会

密码,如果需要存储的话(Codinghoror最近在这方面发表了几篇好文章,提倡像OpenID这样的东西),应该以散列形式存储,并且基本上无法检索。当用户登录时,同样地对他们提供的密码进行散列(在到达应用程序代码后,在将其传输到系统中的任何其他地方之前),并将其与存储的散列版本进行比较


如果用户要求输入密码,则您没有密码。你不能把它给他。这是为了保护他。如果用户忘记了密码,则不向用户提供密码,而是向用户提供重置密码的方法(向文件中的地址发送一封电子邮件,其中包含一个临时可用的URL、一组验证其身份的“安全问题”等),以便用户可以输入新密码以覆盖旧密码。但是,您不应该“显示”用户的密码,因为即使您是系统管理员,也不应该以任何可用的形式看到它。

+1,但将“加密”替换为“哈希”。加密数据仍然可以解密和查看;散列数据不能。@LukeH:说得好。我最近刚习惯于在与商业用户交谈时互换这两个术语,但我应该改掉这个习惯:)虽然我确实意识到这一点,但我对ASP.NET/LINQ/C非常陌生,我正在尝试一步一步地进行。最终目标是