Службы Silverlight и RIA: постоянный вход в систему между сеансами - PullRequest
1 голос
/ 21 января 2011

Я сейчас пробую Silverlight с помощью RIA Services. Я реализую простую форму входа в систему. Я также использую предоставленный шаблон доменной службы аутентификации, который генерирует следующий файл:

[EnableClientAccess]
public class AuthenticationDomainService : AuthenticationBase<User>
{
    // To enable Forms/Windows Authentication for the Web Application, 
    // edit the appropriate section of web.config file.
}

public class User : UserBase
{
    // NOTE: Profile properties can be added here 
    // To enable profiles, edit the appropriate section of web.config file.

    // public string MyProfileProperty { get; set; }
    public int DefaultRows { get; set; }
}

Теперь я могу без проблем входить / выходить из приложения. В приложении Silverlight после входа в систему строка:

WebContext.Current.User.IsAuthenticated;

верните истину.

Тем не менее, мне нужно сохранять это во время сеансов (т.е. когда я перезагружаю страницу, используя F5).

В настоящее время, когда страница перезагружается, я должен повторно войти в систему.

Вот мой логин:

WebContext.Current.Authentication.Login(new LoginParameters(this.UserName, this.Password, true, string.Empty),
                    (LoginOperation loginOperation) =>
                    {
                        if (loginOperation.LoginSuccess)
                        {
                            NotificationMessage Message = new NotificationMessage(this, null, "CLOSE");
                            Messenger.Default.Send<NotificationMessage>(Message);
                        }
                    }, null);

Третий параметр метода Login - это параметр IsPersistent. Из документов MSDN я бы подумал, что при значении true при следующей загрузке страницы пользователь все равно будет авторизован. Однако это не так.

Нужно ли мне каким-то образом читать cookie, который был установлен внутри, а затем входить в фоновый режим с именем пользователя / паролем, предоставленным этим cookie? Или здесь работает какая-то другая магия?

Я надеюсь, что как-то уже сделал это.

Заранее спасибо

1 Ответ

4 голосов
/ 04 февраля 2011

Пройдя через шаблон Silverlight Business Application, я нашел следующую строку кода:

WebContext.Current.Authentication.LoadUser(this.Application_UserLoaded, null);

Хорошее место для его вызова - событие запуска приложения в App.xaml.cs.Это загрузит аутентифицированного пользователя с сервера.

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

...