Простой логин
У меня есть сервис WCF, как это:
[ServiceContract( SessionMode=SessionMode.Required)]
public interface IService
{
[OperationContract(IsInitiating = true, IsTerminating = false)]
void login(string id);
[OperationContract(IsInitiating = false, IsTerminating = false)]
string getdata();
}
public class Service : IService
{
public void login(string hashedid)
{
if (username != "someusername" || password != "somepassword")
{
// can not get data
}
else
{
// can get data
}
}
public string getdata()
{
return "these are data";
}
}
Как я могу написать метод входа в систему и создать клиентское приложение? Спасибо вам.
1 ответ
Решение
[ServiceContract( SessionMode=SessionMode.Required)]
public interface IService
{
[OperationContract(IsInitiating = true, IsTerminating = false)]
void login(string username, string password);
[OperationContract(IsInitiating = false, IsTerminating = false)]
string getdata();
}
public class Service : IService
{
// todo: make threadsafe!
public static List<Guid> authenticated = new List<Guid>();
public void login(string username, string password)
{
if (username == "correctUsername" || password == "correctPassword")
{
// user has given correct username/pasword
Guid currentSessionId = OperationContext.Current.SessionId;
// note: can throw Exception when calling login twice or more, check if item exists first
authenticated.Add(currentSessionId);
}
}
public string getdata()
{
Guid currentSessionId = OperationContext.Current.SessionId;
if (List.Contains(currentSessionId)
{
return "these are data";
}
return String.Empty;
}
}
Вы можете идентифицировать сеанс по текущему идентификатору сеанса. После правильной аутентификации пользователя вы можете добавить этот сеанс в список аутентифицированных сеансов.
Mind: Это просто какой-то псевдокод. Идентификатор сеанса должен быть удален после закрытия сеанса, список, который я использую, не является потокобезопасным,... Но я надеюсь, что это поможет вам в правильном направлении.