ログイン方法
ログイン方法は大きく分けて GROWI にユーザーを作成してログインするか、外部のサービスのアカウントを利用してログインするかの二種類がある
local / ldap 認証
_api/v3/login
に POST リクエストする- 認証に成功すると適当なリダイレクトをクライアントに返し、クライアントが router.push して遷移させる
外部アカウント認証
- window.location.href によって外部サービス (Google, Github など) の認証画面に遷移
- GROWI 内部の
/passport/{認証方法}
に GET リクエストして、認証方法に応じた認証画面に遷移させる - GROWI のコントロール下から外れる
- GROWI 内部の
- 外部サービスの認証画面で2章に成功すると外部サービス -> GROWI の
/passport/{認証方法}/callback
に対して GET リクエストが走る - 適当なリダイレクト先にサーバーがリダイレクトさせる
ログイン後のリダイレクトシーケンス(未ログイン時)
- 未ログイン状態で /Sandbox にアクセスしようとする
- login-required middleware がセッション (req.session.redirectTo) に req.originalUrl (/Sandbox) に保持し、
/login
にリダイレクトさせる - ログインする(local 認証の場合)
_api/v3/login
に POST される- injectRedirectTo middleware が走る
- セッションが req.login() 時に再生成されるため req.session.redirectTo が消えてしまう
- res.locals.redirectTo に移し替えて変数で保持し、次の middleware に渡すための middleware
- loginPassport.loginWithLocal middleware が走る
- この中で req.login が走る
- 認証に成功すると loginSuccessHandler メソッドが走る
- ここでリダイレクト先をクライアントに返却するが、injectRedirectTo middleware によって埋め込まれたリダイレクト先を使う
- injectRedirectTo middleware が走る
login-required middleware
socket 関連でのみ fallback arg を使っている
Commments