- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果用户已登录,我会尝试检查 CanActivate gurad。
如果是,那么我会把他导航到某个页面。
如果没有,那么我会把他导航到登录页面。
我使用 promise 。
我有一个名为 LoginService 的服务:
export class LoginService {
urlcheck = 'http://localhost:80/isconnected.php';
resultCheck;
constructor(private http: HttpClient, private router: Router)
{
}
async checkLogin()
{
const x = await this.updateConnectedState();
return x;
}
updateConnectedState()
{
//formData here...
return this.http.post(this.urlcheck, formData).toPromise()
.then(
(response) =>
{
this.resultCheck = response;
console.log(response);
return this.resultCheck.state; //state is true/false
},
(error) =>
{
console.log(error);
return false;
}
);
}
}
canActivate Gurad:
export class BackHomeGuardService implements CanActivate
{
constructor(private logService: LoginService, private router: Router)
{
}
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean>|boolean
{
const result = this.logService.checkLogin();
console.log( result);
if (result)
{
console.log('true');
// navigate to hom page
return true;
}
else
{
console.log('false');
// navigate to login page
return false;
}
}
}
guard canActivate 函数始终返回 true。
我检查了控制台, promise 的结果是:
__zone_symbol__state: null
__zone_symbol__value: []
我想让 canActive 在它做某事之前等待结果。
如果我的后端(php 代码文件)需要 30 秒才能完成怎么办?
我需要一个解决方案。谢谢。
最佳答案
根据CanActivate
的类型:
export declare interface CanActivate {
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree;
}
canActivate
方法可以返回 Observable、Promise 或 boolean。
您可以像这样简单地返回您的 checkLogin()
调用:
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean>|boolean {
return this.logService.checkLogin();
}
一切都会正常进行。
更新
回答问题“我如何处理我的 canActivate 中返回的 bool 值” 来自评论
CanActivate 的思想是在某种情况下限制某些路由的访问。您可以通过链接您的 Promise 或 Observable 来执行一些副作用(但我不确定它们将如何显示,除非它是一个 console.log):
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean>|boolean {
return this.logService
.checkLogin()
.then(canLogin => {
console.log('Can user login:', canLogin);
// perform you side effects here
})
}
关于Angular - 如何让 canActivate 等待 promise 响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61388093/
你好,我是 Angular 6 的新手,我遇到了一个关于提取用户的身份验证问题,如果没有登录就不会进入任何页面,我面临的问题是 Class 'NeedAuthGuard' incorrectly im
我写了一个 angular 4.3.0 typescript 库。在构建我的库时,我在 *.d.ts 文件中看到以下错误。 ERROR in [at-loader] ..\myLibrary\lib-
下面是我在 TypeScript 中实现 CanActivate 保护子句,当我编译这段代码时,它显示如下错误 A function whose declared type is neither 'v
我有这个 AuthGuard。在这段代码中,我想创建一个条件。如果我的 resetpasss 不为空,我想在此处的 ResetPassIdComponent 中导航,否则我想在 LoginFirstC
据我了解CanActivate Angular2 中的接口(interface)仅对路由更改有效。因此,如果我有一个要求用户登录的页面 p,我可以创建一个实现 CanActivate 接口(inter
我的路由器中有这些线路: .. canActivate: [MyGuard], path: "search", component: SearchComponent,
我有以下问题。我制作了一个 CanActivate Guard,如果您已登录,您可以“转到”债务组件。我的问题是,当我登录时,我想将用户重定向到债务组件(因为 RegistrationComponen
我正在使用 Observable返回 canActivate() .为测试设置了以下功能,它正确解析,组件显示。 canActivate(route: ActivatedRouteSnapshot,
最近,我一直在思考我正在开发的应用程序的安全性。客户端基于 Angular 构建,后端为 Rails API。据我所知,普遍的共识是,如果它在客户端,假设它可以被破坏。所以这让我想知道我何时以及是否应
我最近被 Angular 路由守卫卡住了。 CanActive 仅在页面加载时运行一次,并且不会在 protected 路由内的路由更改时运行。我认为这已更改,因为它过去常常在每次更改时运行。根据我在
我有这样的路线设置: export const APP_ROUTES: Routes = [ { path: '', resolve: {
我已经为我的 Angular 5.2 应用程序实现了 CanActivate 路由保护。如果它返回 true,则 URL 不会更改,但当它返回 false 时,URL 会更改并将路径附加到 URL。在
使用守卫,我尝试访问服务 但我无法在 canActivate 中返回一个 promise (它具有我无法更改的特定签名) 我的 autService 返回一个 promise ,因为它是异步的 我怎样
我有这样的路线: [ { path: ':orgName', children: [ { path: '', component: Ho
我有这样的路线: [ { path: ':orgName', children: [ { path: '', component: Ho
我有一个路径列表,我想将 CanActivate 应用于除某些路径之外的所有路径。是否有任何 Angular 丢弃某些路径的方法。目前我正在将 canActivate 应用到所有的 URL。如果有很多
I'm loading a books module with the following routing configuration (src/app/index.ts) -- 请注意,这是一个 s
我正在尝试在我的应用程序路由上使用 canActivate 功能,但是每当我编译该应用程序时,日志都会显示不断刷新的失败消息,我已将 console.log() 用于可见性。 我在这里遗漏了什么吗?
我有一个以这种方式使用惰性模块的应用程序: export const routes: Routes = [ { path: '', component: WelcomeCompon
我有一个关于 CanActivate 的问题 import { AuthService } from './auth.service'; import { CanActivate } from '@a
我是一名优秀的程序员,十分优秀!