Как авторизоваться и войти одновременно - PullRequest
0 голосов
/ 06 июня 2019

Чтобы использовать мое приложение, пользователь должен пройти процесс входа в систему, чтобы получить доступ к различным частям приложения. Поэтому, независимо от входа в приложение (независимо от того, начинаются ли они с / home или / whatElse), я бы хотел, чтобы пользователь был авторизован и получил свои разрешения. Их разрешения поступают из функции SignUpSignIn () в контроллере учетной записи.

Когда пользователь пытается получить доступ к /thingElse, у меня есть атрибут [Authorize], который отправляет его на вход в Azure B2C. Но после «Авторизации» функция SignUpSignIn () никогда не срабатывает, и его разрешения не назначаются. на их сессию. Так что в каком бы месте они ни оказались, не работает должным образом ( и вероятные ошибки). Как я могу заставить пользователя запускаться через SignUpSignIn () после авторизации?

Вот как я авторизую

namespace TaskWebApp.Controllers
{
[Authorize]  //<---
    public class SomethingElseController : Controller
    {
        // GET: SomethingElse
        public ActionResult Index()
        {
            return View();
        }
    }
}

Так пользователь получает свои разрешения.

 public class AccountController : Controller
    {
     public async Task SignUpSignIn()
        {
            if (!Request.IsAuthenticated)
            { ///}
            if (Request.IsAuthenticated)
            { //apply permissions to user's session }
        }
     }

Я ожидаю, что пользователь перейдет на /thingelse и будет перенаправлен на страницу входа в Azure B2C. Как только они нажимают «войти», чтобы запустить SignUpSignIn () из контроллера учетных записей, и их разрешения назначаются для их сеанса.

1 Ответ

0 голосов
/ 06 июня 2019

После некоторых исследований я обнаружил, что это не очень хороший метод повторного применения разрешений через сеанс.Вместо этого я создал что-то похожее на это:

namespace TaskWebApp.Controllers
{
[Authorize] 
    public class SomethingElseController : Controller
    {
       public async Task<ActionResult> Index(){
           if(Session["foo"] == null){ //there is no session data
               await SignUpSignIn("/somethingelse") //This goes to the account controller and applies permissions on the session
           }
           else 
           {
               return View();
           }
        }
       private async Task SignUpSignIn(string redirectLink = "")
        {
            var controller = DependencyResolver.Current.GetService<AccountController>();
            controller.ControllerContext = new ControllerContext(Request.RequestContext, controller);
            await controller.SignUpSignIn(redirectLink);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...