pnp-auth
adds additional authentication options for PnPjs library via implementing custom NodeFetchClient
!Important: as library implements NodeFetchClient
and depends on node-sp-auth
module, you can use pnp-auth
only in nodejs environment
pnp-auth
uses node-sp-auth
as authentication library, thus making all authentication options from node-sp-auth
available for pnp-auth
.
Supported versions:
- SharePoint 2013 and onwards
- SharePoint Online
For full list of authentication options check out node-sp-auth
readme.
How to use
Install
Note on PnPjs v1 usage
If you need support for the previous version of PnPjs, simply install the version of pnp-auth, which supports PnPjs v1:
npm install pnp-auth@0.x
Install @pnp/sp
libraries (they are listed as peer dependencies for pnp-auth
, that's why you should install them separately).
We need more than just @pnp/sp
because it depends on some other @pnp/
packages:
npm install @pnp/logging @pnp/common @pnp/odata @pnp/sp --save
pnp-auth
Install npm install pnp-auth --save
Bootstrap
Before using PnPjs library, you should make it aware of your authentication data. That should be performed at the start of your application. The code is fairly simple:
import { bootstrap } from 'pnp-auth';import { sp } from '@pnp/sp-commonjs'; bootstrap(sp, authData, siteUrl);// That's it! Now you can use pnp-sp library: sp.web.get().then(...);
OR with factory methods:
import { bootstrap } from 'pnp-auth';import { sp, Web } from '@pnp/sp-commonjs'; bootstrap(sp, authData); // That's it! Now you can use pnp-sp library: let web = Web(siteUrl);web.get().then(...)
API:
bootstrap(sp, authData, siteUrl)
sp
- "sp" object obtained from@pnp/sp-commonjs
library via import:import { sp } from '@pnp/sp-commonjs';
authData
- can be astring
,AuthConfig
object or rawnode-sp-auth
credentials:string
- absolute or relative path to your file with authentication data. File should be generated usingnode-sp-auth-config
CLI. When string is provided,pnp-auth
internally createsAuthConfig
with below default parameters:
let authConfig = new AuthConfig({configPath: <your path to file>,encryptPassword: true,saveConfigOnDisk: true});AuthConfig
- you can provideAuthConfig
directly. To learn more checkoutnode-sp-auth-config
repository- raw credentials - you can pass any credential options which are supported by
node-sp-auth
. For more information checkoutnode-sp-auth
repository as well as wiki
siteUrl
- your SharePoint site url. You have two options when working with SharePoint data. When usingsiteUrl
parameter, you can write a codesp.web.get()
etc., in that case yoursp.web
object will be attached to yoursiteUrl
. If you want to work with different webs, you can use factory method:Web(<url to SharePoint>)
Manual bootstrap
Of course, you can do bootstrap manually, if you want. pnp-auth
exports NodeFetchClient
which you can use in pnp's setup
method:
import NodeFetchClient from 'pnp-auth';import { sp } from '@pnp/sp-commonjs'; sp.setup({ sp: { fetchClientFactory: () => { return new NodeFetchClient(authData, siteUrl); } }});
Development
npm install
npm run build
- tslint & TS compile
Testing
Library has a few integration tests:
npm install
- Rename
settings.sample.ts
tosettings.ts
. UpdatewebTitle
andsubsiteUrl
to your real data. - Use
node-sp-auth-config
to generate credentials inside./config/private.json
file. Site url in credentials should point to site withwebTitle
from step#2
. - Run
npm test