программный вход в систему с поставщиком членства в.NET

class OrderPaidCheckJob < ApplicationJob
  queue_as :default

  def perform(order_id)
    order = Order.find(order_id)
    return if order.nil? || order.paid
    if order.updated_at > 10.minutes.ago # order recently changed
      OrderPaidCheckJob.set(wait: 10.minutes).perform_later(order.id)
      return # end this job. check again 10min later
    end
    order.products.each do |x|
      x.ordinable = true
      x.save
    end
    order.destroy
  end
end
7
задан ddc0660 28 October 2008 в 16:03
поделиться

4 ответа

Я нашел самым удобным создать доступный класс, который обрабатывает установку и сброс Потока. CurrentPrincipal.

    public class TemporaryPrincipal : IDisposable {
        private readonly IPrincipal _cache;

        public TemporaryPrincipal(IPrincipal tempPrincipal) {
            _cache = Thread.CurrentPrincipal;
            Thread.CurrentPrincipal = tempPrincipal;
        }

        public void Dispose() {
            Thread.CurrentPrincipal = _cache;
        }
    }

В методе тестирования Вы просто переносите свой вызов с оператором использования как это:

using (new TemporaryPrincipal(new AnonymousUserPrincipal())) {
    ClassUnderTest.MethodUnderTest();
}
2
ответ дан 6 December 2019 в 12:56
поделиться

Для Вашего кода на самом деле нужен пользователь, зарегистрированный на пути ASP.NET, или ему просто нужен CurrentPrincipal? Я не думаю, что необходимо программно войти в систему сайта. Можно создать GenericPrincipal, установить свойства, в которых Вы нуждаетесь и присоединяете его к, например, Поток. CurrentPrincipal или дразнивший HttpContext. Если бы для Вашего кода на самом деле нужны RolePrincipal или что-то затем, что я изменил бы код, который будет менее связан с членством ASP.NET.

1
ответ дан 6 December 2019 в 12:56
поделиться

Используя Вашего Поставщика Членства можно проверить пользователя, использующего Членство. ValidateUser. Затем можно установить использование cookie аутентификации FormsAuthentication. SetAuthCookie. Пока у Вас есть контейнер cookie, это должно позволить Вам входить в систему пользователь.

0
ответ дан 6 December 2019 в 12:56
поделиться
if(Membership.ValidateUser("user1",P@ssw0rd))
        {
            FormsAuthentication.SetAuthCookie("user1",true); 
}
13
ответ дан 6 December 2019 в 12:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: