Ghost/ghost/magic-link/README.md
Fabien O'Carroll fa54dc569e Created @tryghost/magic-link module (#50)
* slimer create magic-link

Created the initial magic-link project

* Added usage section to README

* Installed types and deps for magic-link

* Added tsconfig.json

* Initial commit for magic-link module

* Renamed hello.test.js -> index.test.js

* Added initial basic test

* Removed test util directory

* Updated ecmaVersion for test eslint parserOptions

* Added tests for MagicLink

* Added language to README usage codeblock

* Updated sendMagicLink to return SentMessageInfo

* Updated README

* Updated README usage example

* Fixed types
2019-09-03 11:07:03 +08:00

110 lines
2.4 KiB
Markdown

# Magic Link
## Install
`npm install @tryghost/magic-link --save`
or
`yarn add @tryghost/magic-link`
## Usage
```js
const util = require('util');
const crypto = require('crypto');
const nodemailer = require('nodemailer');
const MagicLink = require('@tryghost/magic-link');
async function main() {
const generateKeyPair = util.promisify(crypto.generateKeyPair);
const {publicKey, privateKey} = await generateKeyPair('rsa', {
modulusLength: 4096,
publicKeyEncoding: {
type: 'pkcs1',
format: 'pem'
},
privateKeyEncoding: {
type: 'pkcs1',
format: 'pem'
}
});
// https://nodemailer.com/about/#example
const testAccount = await nodemailer.createTestAccount();
const transporter = nodemailer.createTransport({
host: 'smtp.ethereal.email',
port: 587,
secure: false, // true for 465, false for other ports
auth: {
user: testAccount.user, // generated ethereal user
pass: testAccount.pass // generated ethereal password
}
}, {
from: '"Your App" <signin@example.com>',
subject: 'Whatever'
});
const service = MagicLink({
transporter,
publicKey,
privateKey,
getSigninURL(token) {
return `http://example.com/signin?token=${token}`
}
});
/**
* POST /signin
*/
const {token, info} = await service.sendMagicLink({
email: 'test@example.com',
user: {
id: 'some-id'
}
});
// https://nodemailer.com/about/#example
// Preview only available when sending through an Ethereal account
console.log('Preview URL: %s', nodemailer.getTestMessageUrl(info));
// Preview URL: https://ethereal.email/message/WaQKMgKddxQDoou...
/**
* GET /signin
*/
const user = await service.getUserFromToken(token);
// createSomeKindOfSession(user);
}
main();
```
## Develop
This is a mono repository, managed with [lerna](https://lernajs.io/).
Follow the instructions for the top-level repo.
1. `git clone` this repo & `cd` into it as usual
2. Run `yarn` to install top-level dependencies.
## Run
- `yarn dev`
## Test
- `yarn lint` run just eslint
- `yarn test` run lint and tests
# Copyright & License
Copyright (c) 2019 Ghost Foundation - Released under the [MIT license](LICENSE).