2009-10-08 3 views
1

У меня есть сайт, который использует SqlMembershiprovider. Это интернет-магазин. Пользователь регистрируется с его именем пользователя и паролем.Несколько Membershipprovider для одного приложения

Помимо этого есть контроллер, который отвечает за отображение деталей доставки для заказов, которые импортируются из другой системы. Эти заказы не связаны с пользователями в системе членства. Чтобы отобразить данные о доставке, вы должны указать номер заказа и токен, который напечатан в счете-фактуре.

Чтобы разрешить доступ, я хотел бы реализовать пользовательский Memberrovider, который используется только для этого одного контроллера. Можно ли использовать 2 разных поставщика для одного приложения?

EDIT

Есть несколько страниц, которые пользователь может получить доступ только он предоставил и лексема Номер заказа.

ответ

1

Я не думаю, что вам нужен отдельный поставщик членства. Просто сделайте это действие и связанные с ним действия общедоступными (не украшайте AuthorizeAttribute). Затем необходимо указать, что номер заказа и токен-фактура предоставлены. То есть, если у вас есть номер заказа и связанный токен, вы можете отобразить детали доставки. Вы можете проверить это, просто проверив, что они соответствуют данным, предоставленным другой системой.

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult DeliveryDetails(string orderNumber, string invoiceToken) 
{ 
     var order = otherDb.Orders 
         .Where(o => o.OrderNumber == orderNUmber 
             && o.InvoiceToken == invoiceToken) 
         .SingleOrDefault(); 

     if (order == null) 
     { 
      return View("Error"); 
     } 

     return View(order); 
} 
+0

Проблема заключается в том, что у меня есть несколько страниц, которые нуждаются в этом logininformation. Я действительно должен иметь cookie проверки подлинности. Я обновляю свой вопрос, чтобы включить эту информацию. –

+0

Я думаю, что я сделал бы это на основе переменной сеанса вместо cookie. Создайте атрибут настраиваемого фильтра действий, который проверяет, разрешен ли пользователь, или если у них есть флаг сеанса, указывающий, что у них есть действительный токен ордера/счета-фактуры. Это поможет вам избежать использования специальных ролей, чтобы отличать обычных, прошедших проверку подлинности пользователей от этих «гостей» и позволять вам продолжать использовать атрибут AuthorizeAttribute по умолчанию в другом месте. – tvanfosson

0

Надежда эта статья поможет: Using Two ASP.NET Membership Providers to CreateUser C#

+0

Это определенно интересно. Это еще не решение, но, по крайней мере, я вижу, что можно настроить 2 провайдера. Благодаря! –

Смежные вопросы