ログイン方法

ログイン方法は大きく分けて GROWI にユーザーを作成してログインするか、外部のサービスのアカウントを利用してログインするかの二種類がある

local / ldap 認証

  • _api/v3/login に POST リクエストする
  • 認証に成功すると適当なリダイレクトをクライアントに返し、クライアントが router.push して遷移させる

外部アカウント認証

  • window.location.href によって外部サービス (Google, Github など) の認証画面に遷移
    • GROWI 内部の /passport/{認証方法} に GET リクエストして、認証方法に応じた認証画面に遷移させる
    • GROWI のコントロール下から外れる
  • 外部サービスの認証画面で2章に成功すると外部サービス -> GROWI の/passport/{認証方法}/callback に対して GET リクエストが走る
  • 適当なリダイレクト先にサーバーがリダイレクトさせる

ログイン後のリダイレクトシーケンス(未ログイン時)

  • 未ログイン状態で /Sandbox にアクセスしようとする
  • login-required middleware がセッション (req.session.redirectTo) に req.originalUrl (/Sandbox) に保持し、/login にリダイレクトさせる
  • ログインする(local 認証の場合)
  • _api/v3/login に POST される
    1. injectRedirectTo middleware が走る
      • セッションが req.login() 時に再生成されるため req.session.redirectTo が消えてしまう
      • res.locals.redirectTo に移し替えて変数で保持し、次の middleware に渡すための middleware
    2. loginPassport.loginWithLocal middleware が走る
      • この中で req.login が走る
      • 認証に成功すると loginSuccessHandler メソッドが走る
      • ここでリダイレクト先をクライアントに返却するが、injectRedirectTo middleware によって埋め込まれたリダイレクト先を使う

login-required middleware

socket 関連でのみ fallback arg を使っている

Commments