2017-02-16 4 views
1

Я использую ASP.net Web API 2 как мой бэкенд и приложение Ionic 2 в качестве моего интерфейса.Аутентификация приложения Ionic 2 с asp.net web api

Я использую Microsoft UserStore Manager для проверки подлинности моего приложения.

Он использует аутентификацию на основе токенов (пожалуйста, простите меня, если я использую неправильные имена, я все еще новичок в этом).

Мне удалось получить токен через Postman, а затем использовать этот токен в заголовках запросов, таких как «Bearer [token]», чтобы получить любые данные из моего веб-api.

Getting the Token with Postman

Как вы можете увидеть метод является Post и Content-Type является х-WWW-форм-urlencoded.

Выполняя это, он генерирует access_token, а затем я использую этот токен, используя его в своих заголовках, чтобы получить то, что мне нужно.

В моем Ионном App я создал AUTH-service.ts с общедоступным методом под названием входом()

public login(credentials) { 
if (credentials.username === null || credentials.password === null) { 
    let error = this.alertController.create({ 
    title:'Lol', 
    message:'incomplete credentials, Fill them up and come back', 
    buttons: ['ok'] 
    }); 

    error.present(); 
} 
else { 
    return new Promise(resolve => { 
    this.http.post(`${this.baseUrl}/token`, 
    { 
     grant_type:'password', 
     username:credentials.username, 
     password:credentials.password 
    }).map(res => console.log(resolve(res.json()))); 
    }); 
} 

}

А вот код в circles.ts, что вызывает этот метод:

login(){ 
let credentials = { 
    username:"01286220336", 
    password:"[email protected]$$w0rd" 
} 
this.authService.login(credentials) 
.then(data => console.log(data)) 
.catch(data => console.log(data)); 

}

Моя проблема, когда я называю метода регистрации в Circles.ts нет вещь случается, я не знаю почему. Я пробовал в течение 2 недель, но я просто сдался.

Также я не уверен, что я внедряю метод входа в authservice.ts справа.

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

+0

проблема формат .. Вы должны установить заголовок вам войти в систему, чтобы отправить его в нужном формате (х-WWW-форм-кодировке URL) beacuse умолчанию отправить в JSON .. и вы чтобы согласовать имя пользователя/пароль/grant_type, например .. username = xxxx & password = xxxx & grant_type = password –

+0

return new Promise (resolve => { this.http.post ('$ {this.baseUrl}/token', ' username = $ {credentials.username} & password = $ {credentials.password} & grant_type = password' ) .map (res => resolve (res.json())) }); Вот новый фрагмент, по-прежнему не возвращающий ничего – Willy

+0

Подождите, пока вы не вернете заголовок своего сообщения .. что-то вроде: this.http.post ($ {this.baseUrl}/token, username = $ {credentials.username} & password = $ {credentials.pass word} & grant_type = pas sword, {headers: {'Content-type:' 'x-www-form-urlencoded'}}) –

ответ

0

Попробуйте заменить другую часть следующим кодом.

else{ 
    let authObject = "username=xxxx&password=xxxx&grant_type=password"; 
    let headers = new Headers({ 'Content-Type': 'application/x-www-form-urlencoded' }); 
    headers.append('Accept', 'application/json'); 
    let options = new RequestOptions({ headers: headers }); 
    return this.http.post(this.baseUrl + '/token', authObject, options) 
     .toPromise() 
     .then(res => { 
      alert(JSON.stringify(res.json(), null, 4)); 
     }); 
} 
Смежные вопросы