Giraffe + GitHub OAuth-поток в цикле перенаправления AspNet Core - PullRequest
0 голосов
/ 24 мая 2018

Я создал тестовое приложение, в котором я хочу использовать поток Oauth GitHub, пример кода здесь: Маршрутизация выглядит следующим образом:

let webApp =
    logRequest >=> choose [
        GET >=> 
            choose [
                route "/" >=> indexHandler "world"
                route "/login" >=> loginHandler
                route "/signin-github" >=> signinHandler
            ]
        mustBeLoggedIn >=>
            GET >=>
                choose [
                    route "/api" >=> indexHandler "authenticated world"
                ]    
        setStatusCode 404 >=> text "Not Found" ]

Когда я вызываю / api, if вызовет * 1004Команда * challenge с маршрутом / login:

let mustBeLoggedIn : HttpHandler =
    requiresAuthentication (redirectTo true "/login")

let loginHandler = 
    challenge "GitHub"

Поток запускается, и кажется, что все идет хорошо, пока не будет инициировано событие OnCreatingTicket .Это вызывает вызов на https://api.github.com/user, дважды по некоторым причинам.Я настроил путь обратного вызова:

options.CallbackPath <- new PathString("/signin-github")

С помощью Fiddler я вижу выше URL beeing, который вызывается тогда, но перенаправляется на / login (который перенаправляет обратно на GitHub, следовательно, цикл), и я не знаю, почему и чтоперенаправляет./ Signin-github не требует аутентификации.Я добавил некоторые логи, но единственный маршрут называется / login, так что кажется, что перенаправление происходит до того, как будет выполнена маршрутизация Giraffe.Понятия не имею.

Редактировать 14.06.2008: Рабочее решение здесь: https://github.com/EelcoMulder/GiraffeOAuth

1 Ответ

0 голосов
/ 31 мая 2018

Кто-то (damukles) на канале жирафа по функциональному программированию решил это для меня, оказалось, что это был случай «меньше и больше», и я допустил ошибку.обработчик mustBeLoggedIn должен выглядеть следующим образом:

    let mustBeLoggedIn : HttpHandler =
        requiresAuthentication (challenge "GitHub")

и маршруты "/ login" и "/ signin-github" могут быть удалены, очевидно, библиотека auth обрабатывает больше, чем раньше.Я напишу в блоге об этом, обновлю этот пост, когда закончите.

...