2016-06-17 6 views
0

프론트 엔드로 이온 애플리케이션에서 쿠키 인증을 생성하려고하는데, Wordpress를 백엔드로 사용하려고합니다. (this JSON API USER 플러그인 사용) . ?Ionic2/Angular 2 - Wordpress는 쿠키 인증을 앱에서 생성합니다.

그럼 쿠키 생성/제어기 = 사용자 & 방법 = generate_auth_cookie MYURLBASE/API/get_nonce : MYURLBASE/API/사용자/generate_auth_cookie/난스를 = 375034fjwfn39u8 & 자명 =

첫 번째 단계는 논스를 생성하는 john & passsword = PASSWORD-HERE

나는 nonce를 얻을 수 있지만 요청을 처리하는 서비스를 만드는 데 문제가 있습니다. 마지막으로

import {Page, NavController, Alert} from 'ionic-angular'; 
import { FORM_DIRECTIVES, FormBuilder, ControlGroup, Validators, AbstractControl, Control } from 'angular2/common'; 
import { Http, Headers, RequestOptions, Request, RequestMethod, Response } from 'angular2/http'; 
import { Observable } from 'rxjs/Observable'; 
import 'rxjs/Rx'; 
import {LoginService} from './login.service'; 
import {WooPage} from '../woo/woo'; 

@Page({ 
    templateUrl: 'build/pages/ecommerce/login/login.html', 
    providers:[LoginService], 
}) 

export class LoginPage { 

    loginForm: ControlGroup; 
    username: AbstractControl; 
    password: AbstractControl; 
    response; 

    constructor(private loginService:LoginService, public nav: NavController, 
    fb: FormBuilder){ 
     this.loginForm = fb.group({ 
     username: ['', Validators.required], 
     password: ['', Validators.required] 
     }); 
     this.username = this.loginForm.controls['username'], 
     this.password = this.loginForm.controls['password'] 
    } 

// For test purposes 
    getNonce() { 
     this.loginService.getNonce() 
     .subscribe(
     response => this.response = response, 
     error => console.log(error)); 
     } 
// For test purposes 
     generateCookie() { 
     this.loginService.generateCookie(this.loginService.getNonce()) 
     .subscribe(
      response => this.response = response, 
      error => console.log(error)); 
     } 

     login(
      username:string, 
      password:string) :void { 

      this.loginService.login(
       username = this.username.value, 
       password = this.password.value 
     ) 
      .subscribe(
      response => this.response = response, 
      error => console.log(error) 
     ); 
     } 
     } 

그리고 내 login.service.ts :

import {Injectable,Inject} from 'angular2/core'; 
import {Http,Headers,Response} from 'angular2/http'; 
import {Observable} from 'rxjs/Observable'; 
import {NavController, Alert} from 'ionic-angular'; 

@Injectable() 

export class LoginService { 

    private nonceUrl = 'https://MYURL/api/get_nonce/?controller=user&method=generate_auth_cookie' 
    private cookieUrlBase = 'https://MYURL/api/user/generate_auth_cookie/?nonce=' 

    constructor(private http:Http) {} 

getNonce() { 
    let nonce = this.http.get(this.nonceUrl).map(res => res.json().nonce); 
    return nonce; 
} 

generateCookie(nonce) { 
    return this.http.get(this.cookieUrlBase+nonce+'&username='+'chuckNorris'+'&password='+'chuckchuck') 
} 


// TODO: login(
//  username: string, 
//  password: string):Observable<any> { 
// 
//  const body = JSON.stringify(username + password); 
//  let headers = new Headers(); 
// 
//  headers.append('Content-Type', 'application/x-www-form-urlencoded'); 
//  return this.http.post(, body, { 
//  headers : headers 
//  }).map(res => res.json()); 
// } 
} 

I를 여기

내 login.html입니다 :

<form [ngFormModel]="loginForm" (submit)="login(username, password)" style="padding-top: 50px"> 
     <ion-list> 
      <ion-item> 
       <ion-label stacked-label>Nom d'utilisateur ou Email</ion-label> 
       <ion-input type="text" [(ngFormControl)]="username" value=""></ion-input> 
      </ion-item> 

      <ion-item> 
       <ion-label stacked-label>Mot de passe</ion-label> 
       <ion-input type="password" [(ngFormControl)]="password" value=""></ion-input> 
      </ion-item> 

     </ion-list> 
     <div> 
      <button block type="submit">Connexion</button> 
     </div> 
    </form> 

이 내 login.ts입니다 generateCookie 함수를 호출하면 다음 URL이 생성됩니다. https://MYURL/api/user/generate_auth_cookie/?nonce=[object%20Object]&username=chuckNorris&password=chuckchuck

개체가 아닌 nonce 값을 전달하려면 어떻게해야합니까? 로그인 인증을 얻는 더 좋은 방법이 있습니까?

도움을 주셔서 감사합니다. 저는 여기 꽤 분실되어 있습니다 ... 음과.

+0

어떻게 Apache Cordova InAppBrowser를 사용합니까? 'window.open (url, ...); ' – Jagannath

+0

제안을 주셔서 감사합니다. 나는 그것을 살펴볼 것입니다. 왜 nonce가 객체인지, 값이 아닌지 이해할 수 없습니다 ... – Yin

+0

http://stackoverflow.com/a/34889586/124797 .. 링크에는 InAppBrowser를 사용하기위한 코드가 있습니다. ionic2의 경우 대신'window.open (...) '이라고 말해야합니다. – Jagannath

답변

0

함께 시도 :

그래서
{"status":"ok","controller":"user","method":"generate_auth_cookie","nonce":"66e6054397"} 

이 만은 "넌스"속성이 아니라 전체 개체를 전달할 : : 그런 다음

getNonce() { 
    return new Promise(resolve => { 
    this.http.get(this.nonceUrl) 
     .map(res => res.json()) 
     .subscribe(data => { 
      console.log(data); 
     }); 
    }); 
} 

, 그 결과는 무엇인가 같다 result.nonce

this.cookieUrlBase+result.nonce+'&username='+'chuckNorris'+'&password='+'chuckchuck'