LoginSignup
9
5

More than 5 years have passed since last update.

Node.jsでLINEログインするコードを書いてみた

Posted at

ITリテラシー低い人たち用にアカウント作成の敷居を下げたくて、LINEログイン使えないかなーと試してみた。
結論から言うとWebアプリの場合、結局メールアドレスとパスワードを入れる必要があるので微妙。

いつか使うかもしれないのでメモだけしとく。IDトークン取得しない版。
まったくエラーハンドリングしてないので実際に使うときはちゃんと入れること。

login.js
const express = require('express');
const router = express.Router();

const request = require('request');
const co = require('co');

const base_uri = 'https://xxxxx';
const client_id = '9999999999';
const client_secret = 'abcdefg0123456789abcdefghijklmno';

function getUUID() {
  const l = 8;
  const c = "abcdefghijklmnopqrstuvwxyz0123456789";
  const cl = c.length;
  let r = "";
  for(let i=0; i<l; i++) {
    r += c[Math.floor(Math.random()*cl)];
  }
  return r;
}

function getToken(params) {
  return new Promise((resolve, reject) => {
    request.post(params, (error, response, body) => {
      if(error) {
        reject(error);
      } else {
        resolve(body);
      }
    });
  });
} 

router.get('/', function(req, res, next) {
  const rParams = req.query;

  if(rParams.code) {
    // 認可コード取得のコールバックでここに来る
    co(function*() {
      const auth = {
        code: rParams.code,
        state: rParams.state,
      };

      // アクセストークン取得
      const token = yield getToken({
        uri: 'https://api.line.me/oauth2/v2.1/token',
        form: {
          grant_type: 'authorization_code',
          code: auth.code,
          redirect_uri: base_uri,
          client_id: client_id,
          client_secret: client_secret,
        },
        json: true,
      });

      res.send(token);

    });
  } else if(rParams.access_token) {
    // アクセストークン取得後のコールバックでここに来る

    res.send(rParams);

  } else {
    // 初回アクセス時はここに来る

    const url = 'https://access.line.me/oauth2/v2.1/authorize';
    const sParams = [
      'response_type=code',
      `client_id=${client_id}`,
      `redirect_uri=${base_uri}`,
      `state=${getUUID()}`,
      'scope=profile',
      'nonce=my%20app',
    ];

    // 認証画面へリダイレクト(認可コード取得)
    res.redirect(`${url}?${sParams.join('&')}`);

  }

});

module.exports = router;

UUID取得はこちらを使わせていただきました。
https://qiita.com/ryounagaoka/items/4736c225bdd86a74d59c

9
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
5