Passport 是一个 Node.js 的身份验证中间件,它可以轻松添加多种身份验证策略。在本文中,我们将介绍如何使用 Passport 和 passport-github npm 包实现 Github OAuth2.0 登录。
步骤一:安装依赖
首先,我们需要安装 passport 和 passport-github 两个 npm 包:
npm install passport passport-github
步骤二:创建 Github 应用程序
在使用 Github OAuth2.0 登录之前,您需要在 Github 上注册并创建一个应用程序。请按照以下步骤操作:
- 在 Github 上登录您的帐户。
- 转到“Settings > Developer settings > OAuth Apps”页面。
- 单击“New OAuth App”按钮。
- 在“Application name”和“Homepage URL”字段中输入您的应用程序名称和主页 URL。
- 在“Authorization callback URL”字段中输入您的回调 URL。该 URL 必须与您的应用程序匹配,并且必须以 /auth/github/callback 结尾。
- 单击“Register application”按钮。
完成后,您将获得一个“Client ID”和“Client Secret”,这些信息将在下一步中使用。
步骤三:配置 Passport
接下来,我们需要为 Passport 配置 Github 身份验证策略。在您的应用程序启动文件中添加以下代码:
-- -------------------- ---- ------- ----- -------- - -------------------- ----- -------------- - ------------------------------------ ---------------- ---------------- --------- ----------------- ------------- --------------------- ------------ -------------------------------------------- -- --------------------- ------------- -------- ----- - -- ------------------ - ---
请注意,代码中的 GITHUB_CLIENT_ID 和 GITHUB_CLIENT_SECRET 变量应替换为您在步骤二中获得的真实值。callbackURL 应与您在 Github 中注册的回调 URL 匹配。
步骤四:创建登录路由
现在,我们可以创建一个路由来处理 Github 登录请求,并将其链接到 Passport 身份验证策略。在您的应用程序中添加以下代码:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- -------- - -------------------- ----- ------ - ----------------- -------------------------- --------------------------------- ----------------------------------- ------------------------------- - ---------------- -------- --- ------------- ---- - -- ---------- ------------------ - -- -------------- - -------
第一个路由将用户重定向到 Github 登录页面进行身份验证。第二个路由将在 Github 完成身份验证后调用,并在成功时将用户重定向到应用程序主页。
步骤五:测试登录
使用以上代码,您已经可以在自己的应用程序中实现 Github OAuth2.0 登录了。尝试访问 /auth/github 路由,您将被重定向到 Github 登录页面。成功登录后,您将被重定向回您的应用程序,并可以看到用户信息已经存储在 req.user 对象中。
这是一个示例代码,演示了如何将 Passport 和 passport-github 一起使用:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- -------- - -------------------- ----- -------------- - ------------------------------------ ----- ------ - ----------------- -- -------- ------ ------ ------ -- - ------ ------ ----- ---------------- - ----------------- ----- -------------------- - --------------------- -- -------- -- ---------------- ---------------- --------- ----------------- ------------- --------------------- ------------ -------------------------------------------- -- --------------------- ------------- -------- ----- - -- --------------- - ----------------------------------------------------------- -------- ----------------------------------------------------------------------------------