2015-09-04 3 views
1

Я создал приложение с asp.net mvc api с пользователями, после этого tutorial. И все прекрасно работает.asp.net mvc API внешний вход

Теперь я пытаюсь добавить внешние логины (на самом деле просто Facebook). Я смотрел, как это сделать, и я нашел ответ here.

Итак, у меня есть Startup.Auth.cs, настроенный с помощью Facebook AppId/Secret.

Я делаю вызов GET api/Account/ExternalLogins?returnUrl=%2F&generateState=true

А потом я обращаю к данному URL. и затем я возвращаюсь к чему-то вроде http://localhost:49728/#access_token= ... &token_type=bearer&expires_in=2592000&state= ...

И вот моя проблема. Что делать, чтобы зарегистрировать пользователя на веб-сайте.

После того как веб-приложение будет завершено, появится мобильное родное приложение.

EDIT
Я изменил возвратного URL, где я могу задать и сохранить имя пользователя. До сих пор хорошо.

После сохранения нового пользователя, мне нужно сделать логин, так что я пытаюсь это:

var state = new RegExp('[\&&]state=([^&#]*)').exec(window.location.href); 
       $.get(baseurl + 'api/Account/ExternalLogin?provider=Facebook&response_type=token&client_id=self&redirect_uri=' + encodeURIComponent(baseurl) + '&state=' + state[1], function (data, status) { 
        console.log(data); 
       }); 

, но я получаю сообщение об ошибке 400 Bad Request.
Вопрос теперь в том, как я могу исправить это и сделать логин?

ответ

3

Вы должны взять полученный маркер доступа и использовать его для вызова RegisterExternal веб-вызова, добавив его в заголовок авторизации (использование почтальона для проверки), как это:

Авторизация однонаправленного маркер доступа здесь

в регистре внешнего веб-звонка, вам нужно предоставить электронное письмо, которое, я думаю, свяжет его с входом в facebook.

, то вам нужно сделать внешний логин вызов еще раз, как вы сделали в первый раз (ссылка идет от получения внешних логинов)

этот раз возвращаемый маркер доступа будет локальный доступ лексема и не facebook внешнего доступа token, этот токен, который вы можете использовать для вызова asp.net api, добавив его в заголовок http-запросов как «авторизацию» так же, как я объяснил.

Edit: за плохой запроса вы столкнулись попробовать это: перейти к ApplicationOAuthProvider класса, то методу ValidateClientRedirectUri, изменить этот код метода для:

if (context.ClientId == _publicClientId) 
{ 
    Uri expectedRootUri = new Uri(context.Request.Uri, "/"); 

    if (context.RedirectUri.StartsWith(expectedRootUri.AbsoluteUri)) 
    { 
     context.Validated(); 
    } 
} 

return Task.FromResult<object>(null); 
+0

да, почти все, теперь проблема, когда Я пытаюсь снова вызвать внешний логин, «GET/api/Account/ExternalLogin? Provider = Facebook & response_type = token & client_id = self & redirect_uri = http% 3A% 2F% 2Flocalhost% 3A15359% 2F & state = QotufgXRptkAfJvcthIOWBnGZydgVkZWsx8YrQepeDk1' Я получаю 400 ошибок с ошибкой. что не так? – BrunoRamalho

+0

Я не уверен, в чем проблема в вашем случае, мне нужен больше кода и журналов ошибок, было бы более полезно, если вы попытаетесь использовать почтальон, и увидите ошибку или отладку, чтобы увидеть ошибку.тем не менее, есть что-то, что я не хочу, чтобы попытаться сообщить мне, если это сработает. я отредактирую свой ответ, чтобы добавить это изменение. – RaniDevpr

+0

сейчас он работает, забыл установить токен – BrunoRamalho