Github Login #02
46243 ワード
GitHubログインの継続
今回の部分で見るのは
scope
です.scope
は、プレイヤーからどれだけの情報を読み取り、どのような情報をもたらすかについてです.だから、私たちはもちろん必要な情報だけを提供するように要求しなければなりません.
https://docs.github.com/en/developers/apps/building-oauth-apps/authorizing-oauth-apps
例えば、ここに示す
scope
のすべては、ここからadmin scope
を取得することができる.どういう意味ですか?読み書き
organization
またはpublic key
に近いです管理可能
public key
、使用可能public key
public key
など読むことができ、種類が多い.または、
notification
のすべてに対してwatch/unwatch
に近づくことができる.user
もそうです.user
のプロフィールから読み書きすることもできます.あなたが何を望んでいるかによって決まります.
write
は必要ありません.read
だけでいいです.package
を読む必要もなく、gpg_key
を読む必要もありません.あなたが望んでいるのは
user
を読むことができて、user
のemail
を持ってきます.あなたが欲しいのはこれです.
read:user
およびuser:email
.では早速応用を始めましょう
ここには非常に長い
URL
が見えます.block content
if errorMessage
span=errorMessage
form(method="POST")
input(placeholder="Username",name="username", type="text", requeired)
input(placeholder="Password",name="password", type="password", requeired)
input(type="submit", value="Login")
br
a(href="https://github.com/login/oauth/authorize?client_id=2c44ee26963db98266d4&allow_signup=false") Continue with GitHub →
だからもう一つ追加します.この
permission
はscope
とも呼ばれ、ここでは空白のscope
リストを送信する.例としては、
user:email
から始まる.block content
if errorMessage
span=errorMessage
form(method="POST")
input(placeholder="Username",name="username", type="text", requeired)
input(placeholder="Password",name="password", type="password", requeired)
input(type="submit", value="Login")
br
a(href="https://github.com/login/oauth/authorize?client_id=2c44ee26963db98266d4&allow_signup=false&scope=user:email") Continue with GitHub →
正常に動作しているかどうかを確認することにします.更新してContinue with GitHub
をクリック以前とは違うように見えます.現在は
Personal user data
と明示されている.または
url
からuser
に変更されます.https://github.com/login/oauth/authorize?client_id=2c44ee26963db98266d4&allow_signup=false&scope=user
では、今では
Personal data
が近づくことができます.読み書きなどあらゆる方法が可能です.そんなに多くは必要ありません.
最終的にはこの
scope parameter
によって変わります.つまり、
GitHub
との会話では、「こういう情報が欲しい」ということになります.要求された情報に従って、
user
が承認され、GitHub
が情報にアクセスするためにtoken
を提供する.ご覧のように、すべて
URL
に基づいています.KakaoTalkの登録が実現したときも同じことをします.
KakaoTalkから与えられた
URL
を受け、KakaoTalkから与えられたID
を入れ、scope
を入れた.あなたが要請したいものを含む
API
ファイルがあります.read:user
を見てここに
read:user
を置きますhttps://github.com/login/oauth/authorize?client_id=2c44ee26963db98266d4&allow_signup=false&scope=read:user
では適用します.
Personal user data
と表示されます.もう一つ追加スペースで仕切ればいいです.コピー
user:email
ここに空白とuser:email
を入れます.https://github.com/login/oauth/authorize?client_id=2c44ee26963db98266d4&allow_signup=false&scope=read:user%20user:email
email
の住所と履歴書情報がほしいと言われています.Email addresses (read-only), profile information (read-only)
もっと要求することもできます.そしてこれらはすべてURL
にスペースで区切って書けばいいです.他にもやってみよう今回は
delete_repo
を入れます.https://github.com/login/oauth/authorize?client_id=2c44ee26963db98266d4&allow_signup=false&scope=read:user%20user:email%20delete_repo
空白を入れ、
delete_repo
を入れます.ご覧のように、delete repo
が追加されました.これでプレイヤーは「はい/いいえ」になります.
ここでは、「このアプリケーションは
repository
を削除することができます.」This application will be able to delete any repository to which you have admin rights.
これはあまりよく見えません.以前にも見たことがありますが、URL
賞を受賞するように要求されたものはすべて中に入っています.1つの問題は、勝った
URL
を修正し続けることです.ご覧の通り、長すぎます.次に、
GitHub
と同じURL
がほしいとします.これを
Join
に入れると言ったら、これを全部貼り付けます.scope
を交換しても交換し、クライアントID
を交換してもtemplate
を交換します.だからすべてのものを一つの場所に置いたほうがいいです.もちろん、このように書くと非常に複雑で混乱します.
このように交換します.
block content
if errorMessage
span=errorMessage
form(method="POST")
input(placeholder="Username",name="username", type="text", requeired)
input(placeholder="Password",name="password", type="password", requeired)
input(type="submit", value="Login")
br
a(href="/users/github/start") Continue with GitHub →
"/users/github/start"
そうですしかも、まだroute
はないので、新しいroute
を製造します.user.Router.js
から/users
はすでにありますが、どうでもいいです./github
を加えます.userRouter.get("/logout", logout);
userRouter.get("/edit", edit);
userRouter.get("/remove", remove);
userRouter.get("/github/start", startGithubLogin);
userRouter.get(":id", see);
なお、これはstartGithubLogin
というcontroller
を使用している.でもまだ
controller
は作られていないので作ります.userController.js
からexport const startGithubLogin = (req, res) => {}
export const edit = (req, res) => res.send("Edit User");
export const remove = (req, res) => res.send("Remove User");
export const logout = (req, res) => res.send("Log out");
export const see = (req, res) => res.send("See User");
そしてこれはuserController
のこの位置に置かれます.では、
userController
をimport
に変えることができます.userRouter.js
からimport express from "express";
import {
edit,
remove,
logout,
see,
startGithubLogin,
} from "../controllers/userController";
const userRouter = express.Router();
userRouter.get("/logout", logout);
userRouter.get("/edit", edit);
userRouter.get("/remove", remove);
userRouter.get("/github/start", startGithubLogin);
userRouter.get(":id", see);
export default userRouter;
import
をあげました.今はURL
があります.このURL
はuser
をGithub
に変えました.redirect
を予約します.このURL
をもっときれいにします.user.controller.js
からexport const startGithubLogin = (req, res) => {
const baseUrl = "https://github.com/login/oauth/authorize";
ここはstartGithubLogin
何をしますか?URL
を除いて全部authorize
しか入れません次に
const clienID
を入れます.export const startGithubLogin = (req, res) => {
const clientId = "2c44ee26963db98266d4";
const baseUrl = "https://github.com/login/oauth/authorize";
これらを合わせるとURL
になります.その前に
login.pug
でblock content
if errorMessage
span=errorMessage
form(method="POST")
input(placeholder="Username",name="username", type="text", requeired)
input(placeholder="Password",name="password", type="password", requeired)
input(type="submit", value="Login")
br
a(href="/users/github/start") Continue with GitHub →
これでURL
と書きます.次に、
allow_signup = false
およびuser:email
scope
が必要である.export const startGithubLogin = (req, res) => {
const config = {
clientId :"2c44ee26963db98266d4",
allow_signup : false,
scope: "read:user user:email",
}
const baseUrl = "https://github.com/login/oauth/authorize";
};
だからconfig
対象を作ります.clientId
をオブジェクトに入れます.allow_signup = false
scope
は、いくつかのscope
を送信する.どちらの
scope
を使うとread:user
とuser:email
です.必ず空白に分けなければならない。
これは
configuration
客体です.URL
に変更しました.あるいは、この符号化を
URL
にしてもよい.UrlSearchParams
というutility
を書きますexport const startGithubLogin = (req, res) => {
const config = {
clientId :"2c44ee26963db98266d4",
allow_signup : false,
scope: "read:user user:email",
};
URLSearchParams
const baseUrl = "https://github.com/login/oauth/authorize";
};
ブラウザでテストすることもできます.テストしてみます.inspect
に入ります(検査)console
からこのconfig
オブジェクトをコピーします. const config = {
clientId :"2c44ee26963db98266d4",
allow_signup : false,
scope: "read:user user:email",
};
undefined
new URLSearchParams(config)
URLSearchParams {}[[Prototype]]: URLSearchParams
new URLSearchParams(config).toString()
'clientId=2c44ee26963db98266d4&allow_signup=false&scope=read%3Auser+user%3Aemail'
new URLSearchParams(config)
をして、もちろん何も生まれません.ただし、
new URLSearchParams(config).toString()
に接続できます.これでこれらを手に入れたが、符号化された.
今からまた帰ります.
export const startGithubLogin = (req, res) => {
const config = {
clientId :"2c44ee26963db98266d4",
allow_signup : false,
scope: "read:user user:email",
};
const params = new URLSearchParams(config);
const baseUrl = "https://github.com/login/oauth/authorize";
};
ここから、何か起動しないものがあります.clientId variable
を作ってあげたからです.これは
Github
が待つのとは違います.Github
名前の通りclient_id
を待っていますしたがって、
javascript
賞においても、Github
が希望するparameter
に送信される.export const startGithubLogin = (req, res) => {
const config = {
client_id :"2c44ee26963db98266d4",
allow_signup : false,
scope: "read:user user:email",
};
const params = new URLSearchParams(config);
const baseUrl = "https://github.com/login/oauth/authorize";
};
config
もあります.parameter
度作られています.base URl
もあります.今何をするのか、ここで見たように.
const config = {
clientId :"2c44ee26963db98266d4",
allow_signup : false,
scope: "read:user user:email",
};
undefined
new URLSearchParams(config)
URLSearchParams {}[[Prototype]]: URLSearchParams
new URLSearchParams(config).toString()
'clientId=2c44ee26963db98266d4&allow_signup=false&scope=read%3Auser+user%3Aemail'
それらを全部URL
に入れなければなりません.また帰ります.export const startGithubLogin = (req, res) => {
const config = {
client_id :"2c44ee26963db98266d4",
allow_signup : false,
scope: "read:user user:email",
};
const params = new URLSearchParams(config).toString();
const baseUrl = `https://github.com/login/oauth/authorize?${params}`;
return res.direct(baseUrl);
};
toString()
と書いて、次に?
を加えます.そしてquery
にparameter
を入れますそして
${params}
と書きます.こうしてURL
が完成しました.しかし、その前に
return res.direct()
をあげて、baseUrl
に行かせます.実は
baseURL
には行けません.baseURl
は${params}
の部分です.export const startGithubLogin = (req, res) => {
const baseUrl = "https://github.com/login/oauth/authorize";
const config = {
client_id: "2c44ee26963db98266d4",
allow_signup: false,
scope: "read:user user:email",
};
const params = new URLSearchParams(config).toString();
const finalUrl = `${baseUrl}?${params}`;
return res.redirect(finalUrl);
};
このように修正しなければ打たれない.finalUrl
だそうです.では今user
はfinalUrl
ですまた、長い
string
を持っているよりも、このように書いたほうがいいです.今ではどこでもこの
URl
をuser
に送ることができ、よく動いています.link
を1本の線で伸ばす必要はありません.テストしてみます.更新後
Login
をクリックし、Continue with GitHub
をクリックすると正常に動作します.つまりこの
URL
に触れ、URL
を作り出した後userRouter.get("/github/start", startGithubLogin);
export const startGithubLogin = (req, res) => {
const baseUrl = "https://github.com/login/oauth/authorize";
const config = {
client_id: "2c44ee26963db98266d4",
allow_signup: false,
scope: "read:user user:email",
};
const params = new URLSearchParams(config).toString();
const finalUrl = `${baseUrl}?${params}`;
return res.redirect(finalUrl);
};
さらにここへredirect
.確認してください.彼らはAuthorization
を要求しています.email
住所と履歴書情報を読む必要があります.もう一つやるべきことは、
Authorize
をクリックすることです.そして
Authorize
をクリックしたとき、URL
で何が起こったのかよく見てみましょう.クリック後
http://localhost:4000/users/github/callback?code=a8619d69b2f8e2dbee8c
redirect
に電話します.考えてみると、最近どこかでこのURL
を見たことがあります.Authorization callback URL
は、1回目の設定時に指定されたURl
です.Github
のうちuser
が"yes"
を表す場合、Github
はuser
http://localhost:4000/users/github/callback
に送信されます.そして、あなたが言ったように、URL
にuser
を送信します.code
がこのコードです.このコードは後で使います.次の部分で議論することにした.
現在はない
code=a8619d69b2f8e2dbee8c
とURL
を作るからです.幸いなことに、すでに
contorller
を持っています.しかし、/github/start
が必要です.あるいはこれを
/github/callback
に変えることができます.交換したほうがいいと思います.また、このようなエラーが発生したのは
/finish
です.Cannot GET /users/github/finish
にはRouter
/users/github/finish
がないからです.その後、
URL
からLogin
に再更新されます.では、今はもう聞かないで、直接ウェブサイトに送ります.
Continue with Github
がGithub
だったのを覚えているので、これ以上聞く必要はありません.では今から
"yse"
を作ります.userRouter.get("/github/start", startGithubLogin);
userRouter.get("/github/finish", finishGithubLogin);
export const finishGithubLogin = (req, res) => {};
export const edit = (req, res) => res.send("Edit User");
export const remove = (req, res) => res.send("Remove User");
export const logout = (req, res) => res.send("Log out");
export const see = (req, res) => res.send("See User");
今回のセクションでは/users/github/finish
をuser
に送信し、Github
をより美しく見せる.今、
URL
とuser
を一緒に送ります.次のセクションでは、
code
の情報を取得するために、user
を使用します.Reference
この問題について(Github Login #02), 我々は、より多くの情報をここで見つけました https://velog.io/@0_cyberlover_0/Github-Login-02テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol