如何解决以角度检查登录和保护路由的正确方法api odoo
我正在开发一个应用程序来为odoo部署的数据库创建一系列管理视图,这些信息很丰富,但稍后了解登录和检查过程会很有趣。
odoo 代码公开了一个端点来登录,如果过程正确,它不会返回令牌或类似的东西,而是返回一个带有会话 ID、服务器 cookie(httponly)的 cookie,因此我无法从角度应用。
另一方面,odoo 也暴露了一个端点来检查当前的浏览器会话,从而能够知道我们是否已登录。
我已经完全解决了登录过程,我只需要向用户发送 POST 请求并登录并检查响应是否不包含错误,这是我的 authetication.service.ts:
import { Injectable } from '@angular/core';
import { HttpClient,HttpHeaders } from '@angular/common/http';
@Injectable({
providedIn: 'root'
})
export class AuthenticationService {
constructor(private http:HttpClient) {
console.log("Servicio authentication listo")
}
login(user:string,pass:string){
let body = {
"jsonrpc": "2.0","params": {
"db": "database","login": user,"password": pass
}
}
console.log(body);
return this.http.post('/odoo/web/session/authenticate',body)
}
checkSession(){
return this.http.post('/odoo/web/session/get_session_info',{});
}
destroySession(){
console.log('here');
return this.http.post('/odoo/web/session/destroy',{})
}
}
返回一个 observable,我必须通过订阅读取它,并根据它是否带来错误来了解身份验证是否正确。
这是我的auth.guard .ts:
import { ComponentFactoryResolver,Injectable } from '@angular/core';
import { CanActivate,CanActivateChild,CanDeactivate,CanLoad,Route,UrlSegment,ActivatedRouteSnapshot,RouterStateSnapshot,UrlTree,Router } from '@angular/router';
import { Observable,Subject } from 'rxjs';
import { take,finalize,map } from 'rxjs/operators';
import { AuthenticationService } from '../services/authentication.service';
@Injectable({
providedIn: 'root'
})
export class AuthGuard implements CanActivate,CanDeactivate<unkNown>,CanLoad {
constructor(
private authentication:AuthenticationService,private router: Router
) {
}
canActivate(
route: ActivatedRouteSnapshot,state: RouterStateSnapshot): Observable<boolean> | boolean {
return new Observable<boolean>(obs => {
this.authentication.checkSession().subscribe((data:any) => {
if (data.hasOwnProperty('error')!=true) {
obs.next(true);
obs.complete();
}
else{
this.router.navigateByUrl('/login');
obs.complete();
}
});
});
}
}
显然它按我的意愿工作,但我不太了解它是如何工作的,我想,它似乎也有点脏,我想知道是否有人对重构有任何建议。例如,在身份验证服务或类似服务中获取布尔变量的方法。
非常感谢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。