首页 > 解决方案 > 我无法使用令牌进行此角度身份验证

问题描述

有 App x 和 App z。App x 是一个 django 应用程序。App z 是一个 Angular 应用程序。

我想要一个场景,如果从 App x 单击到 app z 的链接,则该用户的令牌与 url 一起发送,然后存储在会话存储中,并且用户数据也被获取并存储在存储中。

  sessionSet(token:string)  {
    this.http.post('http://localhost:8000' + '/sso_api/confirm_keys/' + JSON.stringify({'token':token}),this.httpOptions)
      .subscribe(data=>{
      sessionStorage.clear();
      sessionStorage.setItem('username', data['username']);
      sessionStorage.setItem('token', data['token']);
      sessionStorage.setItem('role', data['role']);
      sessionStorage.setItem('user_id', data['id']);


      this.router.navigate(['/mail'])
      return true;

    },error => {
        alert('Cannot communicate with server, please try again')
      return false;
    })
  }

这是我的 Auth Guard

export class AuthGuard implements CanActivate {
  _hash:string;

  constructor(private dataservice: DataService, private router: Router) {
  }

  canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {

    if (DataService.islogin()) {
      return true;
    }

    else {  

      const hash = route.queryParamMap.get('hash');
      if (hash) {
        if( this.dataservice.sessionSet(hash)){
          return true;
        }

      } else {
        alert("Session expired, redirecting back to app x");
        window.location.replace('http://localhost:8000')
        return false;
      }
    }
  }
}

这是完成令牌验证的 django api(类似的东西)。

@csrf_exempt
@api_view(["POST"])
@permission_classes((AllowAny,))
def confirm_apis(request):
    token = request.data.get("token")
    print(token,"Pasted token")
    try:
        token= Token.objects.get(key=token)

        return Response({'username':token.user.username,
                         'token':token.key,
                         'id':token.user.pk,
                         'role':token.user.role
                         },status=status.HTTP_202_ACCEPTED)
    except Token.DoesNotExist:
        return Response("Nothing",status=status.HTTP_403_FORBIDDEN) 

我不断收到无法与我放置在角度应用程序的服务文件中的服务器错误通信(上面的第一个代码块)。

还,

statusText:“未找到” 网址:“ http://localhost:8000/sso_api/confirm_keys/%7B%22token%22:%222801b6ac5029e793fc9bdfb0a1c1f9160b2f3b97%22%7D

标签: djangoangular

解决方案


推荐阅读