Возвращение строки из LINQ - PullRequest
0 голосов
/ 09 марта 2011

Для школьного проекта мы должны создать оценочный веб-сайт, который требует логин. Для подключения к базе данных я выбрал 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;
}

Сейчас я пытаюсь создать опцию «забыл пароль», в которой вы вводите свой идентификатор и пароль возвращается (позже он будет отправлен вам по электронной почте, не знаете, как мне это сделать, предложения?)

Я попробовал следующий код:

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), lbl1 становится таким:

ВЫБРАТЬ [t0]. [GebruikerWachtwoord] ОТ [dbo]. [Gebruiker] AS [t0] ГДЕ [t0]. [GebruikerID] = @ p0

Я не знаю, как решить эту проблему, и я искал везде, я надеюсь, что кто-нибудь может мне помочь.

Спасибо, Томас

Ответы [ 3 ]

2 голосов
/ 09 марта 2011

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();

Дополнительная информация: MSDN 101 Образцы LINQ


По вашему вопросуЧто касается отправки забытого пароля по электронной почте, вы когда-нибудь задумывались о реализации алгоритма «золотых вопросов»?Он упрощен и делает то же самое.

По сути, во время регистрации просто попросите их ответить на некоторые вопросы, и, если они смогут их проверить, разрешите им сбросить пароль.

1 голос
/ 09 марта 2011

вы вводите свой идентификатор и пароль возвращается

Какой смысл иметь пароль, если кто-нибудь, кто знает имя пользователя, сможет его увидеть? Я знаю, что это не то, о чем вы спрашиваете, но для кого-то, начинающего программировать, я чувствую обязанность указать на это. То, что вы создаете здесь, по сути является полностью сломанной моделью входа в систему. Никто не должен использовать такую ​​систему.

Вы никогда не должны когда-либо отображать пароль. Ни на экране, ни в электронном письме, никогда.

Пароли, если их вообще нужно хранить (у CodingHorror было несколько хороших сообщений в последнее время, пропагандирующих такие вещи, как OpenID), должны храниться в хешированной форме и по существу не могут быть восстановлены. Когда пользователь входит в систему, аналогичным образом хеширует предоставленный им пароль (сразу после получения кода приложения, до его переноса в другое место в системе) и сравнивает его с сохраненной хешированной версией.

Если пользователь запрашивает свой пароль, у вас его нет. Вы не можете дать это ему. Это для его защиты. Вместо того, чтобы предоставить пользователю его пароль, если он забыт, вы предоставляете пользователю средство для сброса его пароля (отправка электронного письма на указанный в файле адрес с временно доступным URL-адресом, набор «секретных вопросов» для проверки его личности). и т. д.), чтобы он мог ввести новый, чтобы перезаписать старый. Но вы не должны иметь возможность «показывать» пользователю его пароль, потому что даже вы, как администратор системы, не должны видеть его в любой доступной форме.

0 голосов
/ 09 марта 2011

wachwoordLogin будет IQueryable, поэтому вы можете получить это с помощью FirstOrDefault(), который вернет ноль, если не найден:

(from p in dc.Gebruikers
 where p.GebruikerID == id
 select p.GebruikerWachtwoord).FirstOrDefault();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...