मैं वर्तमान में बैकएंड के रूप में वसंत बूट के साथ एक कोणीय 2 उदाहरण अनुप्रयोग लागू कर रहा हूं। मुझे फ्रंटेंड ऑथ गार्ड मैकेनिज्म और अवलोकन के साथ कुछ समस्याएं आ रही हैं।http अनुरोध और अवलोकन के साथ Angular2 auth guard
मैं प्राप्त करने के लिए कोशिश कर रहा हूँ:
- जब किसी एक संरक्षित मार्ग एक उपयोगकर्ता पहले से ही प्रमाणन सेवा चर
- अगर यह तो सेट नहीं है में सेट है, तो प्रमाणन गार्ड की जाँच करनी चाहिए में प्रवेश करती है एक http यह अनुरोध करने के लिए अनुरोध जारी किया जाना चाहिए कि कोई सत्र उपलब्ध है या नहीं
- सेवा विधि को एक वास्तविक/गलत मान (संभावित http अनुरोध के रूप में असीमित रूप से) वापस करना चाहिए
- यदि सेवा झूठी आती है तो लेखक को लॉगिन पृष्ठ पर रीडायरेक्ट करना चाहिए
- प्रमाणन गार्ड सही/गलत तो मार्ग लौटना चाहिए या सक्रिय किया जा सकता है या तो नहीं
मेरे कोड वर्तमान में (मैं btw RC5 उपयोग कर रहा हूँ।) इस तरह दिखता है:
प्रमाणीकरण गार्ड
import {Injectable} from "@angular/core";
import {CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router} from "@angular/router";
import {Observable, Subject} from "rxjs/Rx";
import {AuthService} from "./auth.service";
@Injectable()
export class AuthGuard implements CanActivate {
constructor(private authService: AuthService, private router: Router) {}
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | boolean {
var authenticated = this.authService.isAuthenticated();
var subject = new Subject<boolean>();
authenticated.subscribe(
(res) => {
console.log("onNext guard: "+res);
if(!res && state.url !== '/signin') {
console.log("redirecting to signin")
this.router.navigate(['/signin']);
}
subject.next(res);
});
return subject.asObservable();
}
}
प्रमाणीकरण सेवा
import {Injectable} from "@angular/core";
import {User} from "./user.interface";
import {Router} from "@angular/router";
import {Http, Response, Headers} from "@angular/http";
import {environment} from "../environments/environment";
import {Observable, Observer, Subject} from "rxjs/Rx";
@Injectable()
export class AuthService {
private authenticatedUser : User;
constructor(private router: Router, private http: Http) {}
signupUser(user: User) {
}
logout() {
//do logout stuff
this.router.navigate(['/signin']);
}
isAuthenticated() : Observable<boolean> {
var subject = new Subject<boolean>();
if (this.authenticatedUser) {
subject.next(true);
} else {
this.http.get(environment.baseUrl + '/user')
.map((res : Response) => res.json())
.subscribe(res => {
console.log("next: returning true");
this.authenticatedUser = User.ofJson(res);
subject.next(true);
}, (res) => {
console.log("next: returning false");
subject.next(false);
});
}
return subject.asObservable();
}
}
समस्या है: गार्ड राउटर घटक को सक्रिय करने की अनुमति नहीं देता है, भले ही मैं लॉग इन हूं।
सहायता के लिए धन्यवाद!
समस्या क्या है? –
संपादित देखें, राउटर घटक कभी भी सक्रिय नहीं होता है, भले ही मैंने सफलतापूर्वक लॉग इन किया हो। अगर मैं किसी भी वेलेबल्स का उपयोग नहीं करता तो यह ठीक काम करता है, लेकिन मैं http अनुरोधों का उपयोग नहीं कर सकता, इसलिए यह मेरे लिए एक विकल्प नहीं है। – Tim