首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Sharepoint Online web api在使用角登录后返回401

Sharepoint Online web api在使用角登录后返回401
EN

Stack Overflow用户
提问于 2018-11-26 06:34:00
回答 1查看 165关注 0票数 0

我正在使用Adal 4应用程序与Adal angular4连接。我可以查看用户信息,这意味着我可以登录到sharepoint在线应用程序。但是在我无法使用api获得列表之后。

代码语言:javascript
运行
复制
const url = 'https://sitename/sites/applicationName/_api/lists/getbytitle(\'tenets\')/items';
const myHeaders = new HttpHeaders({
  'Authorization': 'Bearer ' + this.adalService.getCachedToken(environment.config.clientId),
  'content-type': 'application/json;odata=verbose'
});
return this.http.get(url, { headers: myHeaders }).subscribe(
  data => console.log(data),
  err => console.log(err),
  () => console.log('in complete')
);
EN

Stack Overflow用户

回答已采纳

发布于 2018-12-17 07:24:09

SharePoint Online用于存储数据,并可用作web。我们正在将这个web集成到Angular应用程序中。下面的步骤有助于将angular4 4与Angular7集成

使用下面的命令安装最新版本的Adal角,

代码语言:javascript
运行
复制
npm install adal-angular4 –save

在provider @app.module.ts中添加AdalService和AdalGurad

代码语言:javascript
运行
复制
providers: [ AdalService, AdalGuard],

在src/Environment.ts文件中设置SharePoint配置

例如:

代码语言:javascript
运行
复制
export const environment = {
  production: false,
  config: {
    tenant: 'tenant-id,
    clientId: 'client-id',
    redirectUri: 'http://localhost:4200/'
  }
};

创建一个服务并导入AdalService,并在构造函数中为AdalService创建一个私有变量。在构造函数() Ex: Web.service.ts中初始化您的SharePoint在线配置

代码语言:javascript
运行
复制
import { AdalService } from 'adal-angular4';
constructor(private adalService: AdalService) {
    this.adalService.init(environment.config);
  }

在服务Ex中编写下面提到的方法:

代码语言:javascript
运行
复制
 handleWindowCallback() {
    this.adalService.handleWindowCallback();
  }
  login() {
    this.adalService.login();
  }
  logout() {
    this.adalService.logOut();
  }
  get authenticate() {
    return this.adalService.userInfo.authenticated;
  }

一旦定义了上述方法,请在登录组件中设置您的登录过程。通常,成功登录后,SharePoint只会重定向到登录组件,因此我们正在验证登录并重定向到特定页面。例如:

代码语言:javascript
运行
复制
import { WebService } from '../web.service';
constructor(private webService: WebService) { }
ngOnInit() {
    this.webService.handleWindowCallback(); // this is to store the token to adal storage
    if (this.webService.authenticate) {
      this.router.navigate(['/', 'dashboard']);
    }
  }
login() {
    this.webService.login();
}

在auth.guard.ts中添加以下代码,以检查用户是否在每次路由之前都经过身份验证,并借助服务中存在的authenticate()方法,

代码语言:javascript
运行
复制
constructor(private webService: WebService) { }
canActivate(
    next: ActivatedRouteSnapshot,
    state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> |boolean{ 
      if (this.webService.authenticate) {
        return true;
      } else {
        this.router.navigate(['/']);
        return false;
      }
    }
  }

在登录组件中添加下面提到的代码,以便在每次登录和注销请求时调用服务,

代码语言:javascript
运行
复制
login() {
     this.webService.login();
}
logout() {
     this.webService.logout();
}

在服务中编写以下方法,使用URL向SharePoint发出请求,并通过传递标题获得相应的响应,

代码语言:javascript
运行
复制
import 'rxjs/add/operator/mergeMap';

getdata(listname): Observable<any> {
    const url = 'https://sitename.sharepoint.com/sites/application_name/_api/web/lists/
                 getByTitle(\'' + listname + '\')/items';
    return this.adalService.acquireToken('tenantid/tenant name')
           .flatMap(token => {
                    const headersParam = new HttpHeaders({
                        'Content-Type': 'application/json;odata=verbose',
                        'Authorization': 'Bearer ' + token.toString()
                    });
                return this.http.get(url, { headers: headersParam });
            });
  }

在要获取和处理数据的组件中添加下面提到的方法。

代码语言:javascript
运行
复制
getdata() {
    const listname = 'tenets';
    this.webService.getdata(listname).subscribe(data => {
      console.log(data);
    });
}

此方法打印“原则”列表的值和标题,

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53475820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档