Feathers: 인증 λ‹€μŒ

에 λ§Œλ“  2018λ…„ 10μ›” 06일  Β·  10μ½”λ©˜νŠΈ  Β·  좜처: feathersjs/feathers

λ‚˜λŠ” Feathers Crow λ‘œλ“œλ§΅ μ—…λ°μ΄νŠΈ μ—μ„œ 이미 이것에 λŒ€ν•΄ 쑰금 μΌμŠ΅λ‹ˆλ‹€. 이 λ¬Έμ œλŠ” λ‹€μŒ λ²„μ „μ˜ Feathers μΈμ¦μ—μ„œ λ‹€λ£° λͺ¨λ“  κ΄€λ ¨ 문제λ₯Ό μˆ˜μ§‘ν•˜κΈ° μœ„ν•œ κ²ƒμž…λ‹ˆλ‹€.

ν”„λ ˆμž„μ›Œν¬ 독립

ν˜„μž¬(Buzzard) λ¦΄λ¦¬μŠ€μ—μ„œ Feathers μ½”μ–΄λŠ” μ™„μ „νžˆ ν”„λ ˆμž„μ›Œν¬ 독립이 λ˜μ—ˆμ§€λ§Œ 인증 ν”ŒλŸ¬κ·ΈμΈμ€ μ—¬μ „νžˆ ​​일뢀 Express 미듀웨어λ₯Ό λ“±λ‘ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. λ‹€μŒ λ²„μ „μ—μ„œλŠ” 미듀웨어가 @feathersjs/express둜 μ΄λ™ν•˜κ³  인증 코어도 ν”„λ ˆμž„μ›Œν¬ λ…λ¦½μ μœΌλ‘œ λ§Œλ“€ κ²ƒμž…λ‹ˆλ‹€. 이것은 Koa λ˜λŠ” MQTT와 같은 μƒˆλ‘œμš΄ 전솑을 ν—ˆμš©ν•©λ‹ˆλ‹€.

ν–₯μƒλœ μ†ŒμΌ“ 인증

ν˜„μž¬ μ›Ή μ†ŒμΌ“μ€ μ‚¬μš©μž μ •μ˜ 이벀트 λ©”μ»€λ‹ˆμ¦˜μ„ 톡해 인증되고 λ‘œκ·Έμ•„μ›ƒλ©λ‹ˆλ‹€. 이둜 인해 일뢀 문제(예: λ“œλ¬Έ "인증 토큰 μ—†μŒ" 였λ₯˜)κ°€ λ°œμƒν–ˆμœΌλ©° 특히 μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈ μ–‘μͺ½μ—μ„œ μ•ˆμ •μ μΈ μž¬μ—°κ²°κ³Ό κ΄€λ ¨ν•˜μ—¬ λ¬Έμ œκ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.

ν–₯μƒλœ 인증 ν΄λΌμ΄μ–ΈνŠΈ

μ΄λ ‡κ²Œ ν•˜λ©΄ μƒνƒœ μ €μž₯ μ•‘μ„ΈμŠ€ 토큰에 λŒ€ν•œ 쒅속성이 제거되고 μ†ŒμΌ“ 재인증이 μ •μƒμ μœΌλ‘œ μ²˜λ¦¬λ©λ‹ˆλ‹€.

더 이상 μΏ ν‚€κ°€ ν•„μš”ν•˜μ§€ μ•ŠμœΌλ©° oAuthκ°€ κ°œμ„ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

FeathersλŠ” 인증을 μœ„ν•΄ JWTλ₯Ό μ‚¬μš©ν•˜μ—¬ APIλ₯Ό μƒμ„±ν•˜κΈ° μœ„ν•œ λΌμ΄λΈŒλŸ¬λ¦¬μž…λ‹ˆλ‹€. 일반적인 Feathers 섀정이 μΏ ν‚€λ₯Ό μ‚¬μš©ν•˜λŠ” ν•œ 가지 κ²½μš°λŠ” oAuth(Facebook, Google λ“±) 인증 흐름 후에 JWTλ₯Ό λΈŒλΌμš°μ €μ— μ „λ‹¬ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μƒˆλ‘œμš΄ oAuth 및 인증 ν΄λΌμ΄μ–ΈνŠΈλŠ” 더 이상 μΏ ν‚€λ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ©° oAuth 흐름을 ν•œ λ²ˆμ— λͺ¨λ“  μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” λŒ€μ‹  두 λΆ€λΆ„μœΌλ‘œ λΆ„ν• ν•©λ‹ˆλ‹€. oAuth μ•‘μ„ΈμŠ€ 토큰은 Feathers ν‘œμ€€ 인증 λ©”μ»€λ‹ˆμ¦˜μ„ μ‚¬μš©ν•˜μ—¬ JWT둜 κ΅ν™˜ν•  수 μžˆλŠ” 도메인 κ°„ μΉœν™”μ μΈ(λ‘œμ»¬μ—μ„œλ§Œ μ•‘μ„ΈμŠ€ κ°€λŠ₯ν•œ) URL ν•΄μ‹œλ‘œ μ„€μ •λ©λ‹ˆλ‹€.

더 λ‚˜μ€ μ˜΅μ…˜ 처리

이제 λͺ¨λ“  인증 섀정이 λŸ°νƒ€μž„μ— ν‰κ°€λ˜λ―€λ‘œ λ™μ μœΌλ‘œ μ„€μ •ν•  수 있으며 ν•„μš”ν•˜μ§€ μ•Šμ€ μ˜΅μ…˜μ— λŒ€ν•œ 였λ₯˜κ°€ λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ˜ν•œ μ‚¬μš©μž 지정 인증 μ„œλΉ„μŠ€λ₯Ό 톡과할 수 μžˆμŠ΅λ‹ˆλ‹€.

토큰 μƒˆλ‘œ κ³ μΉ¨ 및 λΈ”λž™λ¦¬μŠ€νŠΈ μž‘μ„±

κΈ°μ‘΄ JWT둜 μƒˆλ‘œ 고침을 ν—ˆμš©ν•˜λŠ” λŒ€μ‹  ν‘œμ€€ 인증 μ„œλΉ„μŠ€λŠ” 이제 수λͺ…이 더 κΈ΄ μƒˆλ‘œ κ³ μΉ¨ 토큰도 λ°˜ν™˜ν•©λ‹ˆλ‹€. 토큰 λΈ”λž™λ¦¬μŠ€νŠΈλŠ” μ—¬μ „νžˆ μˆ˜λ™μœΌλ‘œ κ΅¬ν˜„ν•΄μ•Ό ν•˜μ§€λ§Œ μƒˆλ‘œμš΄ 인증 μ„œλΉ„μŠ€μ˜ 방법을 톡해 ν†΅ν•©ν•˜λŠ” 것이 더 μ‰¬μšΈ κ²ƒμž…λ‹ˆλ‹€.

Authentication Breaking Change

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

ν˜„μž¬ 진행 상황은 λ§ˆμŠ€ν„° λΈŒλžœμΉ˜μ—μ„œ 확인할 수 있으며 베타 ν…ŒμŠ€ν„°κ°€ μ‚¬μš©ν•΄ λ³Ό 수 μžˆμ„ λ•Œ λΈ”λ‘œκ·Έ κ²Œμ‹œλ¬Όμ„ μ˜¬λ¦¬λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€. μƒνƒœλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

| λͺ¨λ“ˆ | μ½”λ“œ | λ¬Έμ„œ | CLI
| --- |:---:|:---:|---:|
| @feathersjs/인증 | βœ…| 100% | ❌|
| @feathersjs/authentication-local | βœ… | 80% | ❌|
| @featherjs/인증-oauth | βœ…| 90%| ❌|
| @feathersjs/인증 ν΄λΌμ΄μ–ΈνŠΈ | βœ… | 80%| ❌|

λͺ¨λ“  10 λŒ“κΈ€

μ—¬κΆŒ 폐기

이 토둠은 #844μ—μ„œ μ‹œμž‘λ˜μ—ˆμœΌλ©° https://github.com/feathersjs/feathers/issues/844#issuecomment -390123148μ—μ„œ 이것이 λ°œμƒν•˜λŠ” μš”μ μ„ μš”μ•½ν•©λ‹ˆλ‹€. μš”μ»¨λŒ€, 특히 Express μ΄μ™Έμ˜ ν”„λ ˆμž„μ›Œν¬λ₯Ό μ§€μ›ν•˜λŠ” 것과 κ΄€λ ¨ν•˜μ—¬ PassportJSμ—μ„œ λ§Žμ€ 개발이 이루어지지 μ•Šμ•˜μœΌλ©° Koa λ˜λŠ” Hapi와 같은 λŒ€λΆ€λΆ„μ˜ λ‹€λ₯Έ HTTP ν”„λ ˆμž„μ›Œν¬λŠ” https://github.com/simov/grant와 같은 보닀 μœ μ—°ν•˜κ³  λ―Έλ‹ˆλ©€ν•œ 인증 라이브러리λ₯Ό μ‚¬μš©ν•˜λ„λ‘ μ΄λ™ν–ˆμŠ΅λ‹ˆλ‹€. oAuth용). λ˜ν•œ μ‹€μ œλ‘œ ν•„μš”ν•œ μ „λž΅μ—λŠ” λ„€ 가지 μœ ν˜•λ§Œ 있음이 λ°ν˜€μ‘ŒμŠ΅λ‹ˆλ‹€.

  • 둜컬(μ‚¬μš©μž 이름/λΉ„λ°€λ²ˆν˜Έ)
  • JWT
  • oAuth(+ oAuth μ•‘μ„ΈμŠ€ 토큰)
  • API ν‚€

Passportλ₯Ό ν•΄κ²°ν•  ν•„μš” 없이 FeathersλŠ” 문제λ₯Ό λͺ…ν™•ν•˜κ²Œ κ΅¬λΆ„ν•˜μ—¬ HTTP 라이브러리 및 기타 전솑 λ©”μ»€λ‹ˆμ¦˜(예: MQTT λ˜λŠ” P2P μ—°κ²°) μœ„μ— μ‰½κ²Œ λ°°μΉ˜ν•  수 있으며 훨씬 더 μ‰½κ²Œ μ΄ν•΄ν•˜κ³  μ‚¬μš©μž μ •μ˜ν•  수 μžˆλŠ” 인증 λ©”μ»€λ‹ˆμ¦˜μ„ μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

params.authentication

Feathers μΈ‘μ—μ„œλŠ” μ„œλΉ„μŠ€ ν˜ΈμΆœμ—μ„œ params.authentication λ₯Ό μ„€μ •ν•˜λŠ” 것이 인증 정보λ₯Ό μ œκ³΅ν•˜λŠ” _μœ μΌν•œ_ λ°©λ²•μž…λ‹ˆλ‹€. params.authentication μ—λŠ” μ„œλΉ„μŠ€ ν˜ΈμΆœμ„ μΈμ¦ν•˜λŠ” 데 ν•„μš”ν•œ 정보가 ν¬ν•¨λ˜λ©° 이미 μ‚¬μš© 쀑인 { strategy: 'local', email: 'email', password: 'password' } ν˜•μ‹μž…λ‹ˆλ‹€.

// Call `find` with a given JWT
app.service('messages').find({
  authentication: {
    strategy: 'jwt',
    accessToken: 'someJWT'
  }
});

호좜자(예: REST λ˜λŠ” websocket 전솑, 후크 λ˜λŠ” λ‹¨μœ„ ν…ŒμŠ€νŠΈ)λŠ” params.authentication 전달을 λ‹΄λ‹Ήν•©λ‹ˆλ‹€. 이것은 authenticate 후크가 λ‚΄λΆ€ ν˜ΈμΆœμ— λŒ€ν•΄ μ‹€ν–‰λ˜λŠ”μ§€ μ—¬λΆ€ λ˜λŠ” 인증 정보가 μ‹€μ œλ‘œ μ–΄λ””μ—μ„œ μ˜€λŠ”μ§€ 더 이상 ν˜Όλž€μ΄ 없을 κ²ƒμž„μ„ μ˜λ―Έν•©λ‹ˆλ‹€.

authenticate 후크

authenticate ν›„ν¬λŠ” 계속 μ‘΄μž¬ν•©λ‹ˆλ‹€. μ „λž΅ 이름 λͺ©λ‘μ΄ ν•„μš”ν•˜λ©° λ‹€μŒ 쀑 ν•˜λ‚˜λ₯Ό μˆ˜ν–‰ν•©λ‹ˆλ‹€.

  • 였λ₯˜λ₯Ό λ°œμƒμ‹œν‚€μ§€ μ•Šμ€ 첫 번째 μ „λž΅μœΌλ‘œ λ‹€μŒ 후크λ₯Ό κ³„μ†ν•˜κ³  λ°˜ν™˜ κ°’(μ•„λž˜ μ°Έμ‘°)을 params λ³‘ν•©ν•©λ‹ˆλ‹€.
  • λ˜λŠ” λͺ¨λ“  μ „λž΅μ΄ μ‹€νŒ¨ν•œ 경우 μ‹€νŒ¨ν•œ 첫 번째 μ „λž΅μ˜ 였λ₯˜λ₯Ό λ˜μ§‘λ‹ˆλ‹€.

    params.authentication 에 strategy 이름이 ν¬ν•¨λœ 경우 ν•΄λ‹Ή μ „λž΅λ§Œ ν˜ΈμΆœλ©λ‹ˆλ‹€. 그렇지 μ•ŠμœΌλ©΄ λͺ¨λ“  μ „λž΅μ΄ ν˜ΈμΆœλ©λ‹ˆλ‹€. params.authentication κ°€ μ „ν˜€ μ„€μ •λ˜μ§€ μ•Šμ€ 경우 ν›„ν¬λŠ”

  • μ™ΈλΆ€ ν˜ΈμΆœμ— λŒ€ν•œ 였λ₯˜ λ°œμƒ

  • λ‚΄λΆ€ 톡화에 λŒ€ν•΄ ν‰μ†Œμ™€ 같이 κ³„μ†ν•©λ‹ˆλ‹€(예: params.user μˆ˜λ™μœΌλ‘œ μ„€μ •ν•˜λŠ” 경우).
app.service('messages').hooks({
  before: authenticate('jwt', 'local', 'anonymous')
});

인증 μ „λž΅

κΈ°λ³Έ 인증 μ „λž΅μ€ params.authentication 의 데이터λ₯Ό κ°€μ Έμ˜€κ³  성곡 개체λ₯Ό λ°˜ν™˜ν•˜κ±°λ‚˜ μ„±κ³΅ν•˜μ§€ λͺ»ν•œ 경우 였λ₯˜λ₯Ό throwν•˜λŠ” authenticate λ©”μ„œλ“œκ°€ μžˆλŠ” κ°œμ²΄μž…λ‹ˆλ‹€.

const { Forbidden } = require('@feathersjs/errors');

const daveStrategy = {
  async authenticate (authParams) {
    const { username, password } = authParams;

    if (username === 'david' && password === 'secret') {
      return {
        user: {
          name: 'Dave',
          admin: true
        }
      };
    }

    throw new Forbidden('Not super Dave');
  }
};

app.authentication.registerStrategy('superdave', daveStrategy);

authenticate ν›„ν¬μ—μ„œ λ°˜ν™˜λœ κ°œμ²΄λŠ” params μ„œλΉ„μŠ€ ν˜ΈμΆœμ— λ³‘ν•©λ˜λ―€λ‘œ 이 μ˜ˆμ œμ—μ„œλŠ” params.user ν•©λ‹ˆλ‹€.

ν™•μž₯ μ „λž΅

인증 μ „λž΅μ€ λ‚΄λΆ€μ μœΌλ‘œ μΆ”κ°€ λ©”μ„œλ“œλ₯Ό ν¬ν•¨ν•˜κ³  ν˜ΈμΆœν•  수 μžˆμŠ΅λ‹ˆλ‹€. Feathers μ „λž΅μ€ ν™•μž₯을 톡해 μ‚¬μš©μž μ •μ˜ν•  수 μžˆλŠ” 클래슀둜 κ΅¬ν˜„λ©λ‹ˆλ‹€(μ΄λŠ” κ²€μ¦μžλ₯Ό λŒ€μ²΄ν•˜κ³  기본적으둜 μ „λž΅κ³Ό κ²€μ¦μžλ₯Ό 단일 클래슀둜 κ²°ν•©ν•©λ‹ˆλ‹€):

class LocalStrategy {
  constructor(app);
  async findUser(authParams);
  async comparePassword(user, password);
  async authenticate (authParams);
}

class MyLocalStrategy extends LocalStrategy {
  async findUser(authParams);
}

app.authentication.registerStrategy('local', new MyLocalStrategy(app));

HTTP νŒŒμ‹±

μ „λž΅μ€ κΈ°λ³Έ λ…Έλ“œ HTTP μš”μ²­ 및 응닡을 κ°€μ Έμ˜€κ³  params.authentication (λ˜λŠ” null )에 λŒ€ν•œ 값을 λ°˜ν™˜ν•΄μ•Ό ν•˜λŠ” parse λ©”μ„œλ“œλ₯Ό μ œκ³΅ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

const daveStrategy = {
  async authenticate (authParams) {
    throw new Forbidden('Not super Dave');
  }

  async parse (req, res) {
    const apiKey = req.headers['x-super-dave'];

    if (apiKey) {
      return {
        strategy: 'superdave',
        apiKey
      }
    }

    return null;
  }
};

그런 λ‹€μŒ HTTP λΌμ΄λΈŒλŸ¬λ¦¬λŠ” μ΄λŸ¬ν•œ λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ params.authentication ν•˜κ±°λ‚˜ 자체 미듀웨어λ₯Ό μΈμ¦ν•˜λŠ”μ§€ 여뢀와 방법을 κ²°μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ•± 인증

app.authenticate(authParams, [ strategies ]) λŠ” 주어진 인증 λ§€κ°œλ³€μˆ˜λ‘œ 주어진 μ „λž΅μ„ μ‹€ν–‰ν•©λ‹ˆλ‹€:

// Will return the user for a JWT (on the server)
const { user } = app.authenticate({ accessToken }, 'jwt');

μ„œλΉ„μŠ€ ν˜ΈμΆœμ—μ„œ params.authentication λ₯Ό μ„€μ •ν•˜λŠ” 것은 인증 정보λ₯Ό μ œκ³΅ν•˜λŠ” _μœ μΌν•œ_ λ°©λ²•μž…λ‹ˆλ‹€.

λͺ¨λ“  service() ν˜ΈμΆœμ— accessToken λ₯Ό μ œκ³΅ν•΄μ•Ό ν•˜λŠ” μ΄μœ μ— λŒ€ν•΄ 섀계 포인트λ₯Ό μ‚΄νŽ΄λ³΄μ‹€ 수 μžˆμŠ΅λ‹ˆκΉŒ?

이것은 μ„œλ²„μ—λ§Œ 적용되며 인증이 κ΅¬μ„±λ˜λ©΄ λͺ¨λ“  μ„œλΉ„μŠ€ ν˜ΈμΆœμ— λŒ€ν•΄ μ„€μ •λœ params.provider 및 params.headers (μ›Ή μ†ŒμΌ“μ˜ 경우 μ΄λŠ” κ°€μ§œ 헀더일 λΏμž…λ‹ˆλ‹€)λ₯Ό 톡해 이미 μ•”μ‹œμ μœΌλ‘œ λ°œμƒν•©λ‹ˆλ‹€. 이것은 전솑 ν”„λ‘œν† μ½œ 독립 후크 및 μ„œλΉ„μŠ€μ™€ μ‹€μ œ 전솑 λ©”μ»€λ‹ˆμ¦˜(예: Express λ˜λŠ” Socket.ioκ°€ μžˆλŠ” HTTP) μ‚¬μ΄μ˜ Feathers 뢄리λ₯Ό κΉ¨κ³  authenticate('jwt') 후크가 μ‹€μ œλ‘œ μ‹€ν–‰λ˜κ³  무엇에 μ‚¬μš©λ˜λŠ”μ§€λ₯Ό 맀우 ν˜Όλž€μŠ€λŸ½κ²Œ λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€. κ·Έ 인증 정보.

μœ μš©μ„± μΈ‘λ©΄μ—μ„œ μ™ΈλΆ€ λ˜λŠ” λ‚΄λΆ€ ν˜ΈμΆœμ— λŒ€ν•΄ μ‹€μ œλ‘œ λ³€κ²½λ˜λŠ” 것은 μ—†μ§€λ§Œ 이제 μ„œλ²„μ—μ„œ λͺ…μ‹œμ μœΌλ‘œ authenticate 후크λ₯Ό νŠΈλ¦¬κ±°ν•˜λ €λ©΄ 항상 params.authentication μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이것은 인증 정보λ₯Ό Feathers 인증 λ©”μ»€λ‹ˆμ¦˜μ— μ „λ‹¬ν•˜λŠ” ν‘œμ€€ν™”λœ 방법이 μžˆλŠ” Express μ΄μ™Έμ˜ μƒˆλ‘œμš΄ ν”„λ ˆμž„μ›Œν¬ ν”ŒλŸ¬κ·ΈμΈ(예: Koa, HTTP2 λ˜λŠ” λ©”μ‹œμ§• λŒ€κΈ°μ—΄)에 특히 μ€‘μš”ν•©λ‹ˆλ‹€.

인증 ν΄λΌμ΄μ–ΈνŠΈλŠ” app.authenticate() λ₯Ό ν˜ΈμΆœν•˜μ—¬ λ‘œκ·ΈμΈν•œ 후에도 인증된 μš”μ²­μ„ κ³„μ†ν•©λ‹ˆλ‹€.

λͺ…ν™•νžˆ ν•΄ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€. v3, 특히 socket.io React Native ν΄λΌμ΄μ–ΈνŠΈλ₯Ό μ‚¬μš©ν•œ ν…ŒμŠ€νŠΈκ°€ 맀우 κΈ°λŒ€λ©λ‹ˆλ‹€.

여기에 ν”„λ¦¬λ¦΄λ¦¬μ¦ˆμ— λŒ€ν•œ 정보λ₯Ό ν™•μ‹€νžˆ 넣을 κ²ƒμž…λ‹ˆλ‹€. 인증된 μ›Ή μ†ŒμΌ“μ„ 훨씬 더 μ•ˆμ •μ μœΌλ‘œ μ²˜λ¦¬ν•΄μ•Ό ν•˜λŠ” 인증 ν΄λΌμ΄μ–ΈνŠΈλ₯Ό λ§ˆλ¬΄λ¦¬ν•˜κΈ°λ§Œ ν•˜λ©΄ λ©λ‹ˆλ‹€. 일단 μ™„λ£Œλ˜λ©΄ μƒˆλ‘œμš΄ μ½”μ–΄ + 둜컬 및 jwt 인증을 ν…ŒμŠ€νŠΈν•˜λŠ” 데 도움을 λ°›λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. oAuthλŠ” κ·Έ 이후에 곧 따라야 ν•©λ‹ˆλ‹€.

3버전은 μ–Έμ œ λ‚˜μ˜€λ‚˜μš”?

λ‚΄ μ§ˆλ¬Έμ— λŒ€ν•œ 닡변이 μžˆμŠ΅λ‹ˆκΉŒ?

ν˜„μž¬ 진행 상황은 λ§ˆμŠ€ν„° λΈŒλžœμΉ˜μ—μ„œ 확인할 수 있으며 베타 ν…ŒμŠ€ν„°κ°€ μ‚¬μš©ν•΄ λ³Ό 수 μžˆμ„ λ•Œ λΈ”λ‘œκ·Έ κ²Œμ‹œλ¬Όμ„ μ˜¬λ¦¬λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€. μƒνƒœλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

| λͺ¨λ“ˆ | μ½”λ“œ | λ¬Έμ„œ | CLI
| --- |:---:|:---:|---:|
| @feathersjs/인증 | βœ…| 100% | ❌|
| @feathersjs/authentication-local | βœ… | 80% | ❌|
| @featherjs/인증-oauth | βœ…| 90%| ❌|
| @feathersjs/인증 ν΄λΌμ΄μ–ΈνŠΈ | βœ… | 80%| ❌|

μ•ˆλ…•ν•˜μ„Έμš”, 이것은 ν›Œλ₯­ν•©λ‹ˆλ‹€!

미래의 μœ μ—°μ„±μ€ ν›Œλ₯­ν•˜μ§€λ§Œ 아직 FeathersJS ν”„λ‘œμ νŠΈμ˜ 인증에 확신이 μ—†μœΌλ©° 이λ₯Ό μƒμ„±ν•˜κΈ° μœ„ν•΄ ν˜Όλž€μŠ€λŸ¬μš΄ 과정을 κ²ͺκ³  μžˆμŠ΅λ‹ˆλ‹€.

μ™„λ²½ν•˜κ³  ν…ŒμŠ€νŠΈλ₯Ό 거친 μ•ˆμ „ν•œ 인증 κ΅¬ν˜„μ„ 톡해 μžμ‹  있게 κΈ°λŠ₯을 진행할 수 μžˆμŠ΅λ‹ˆλ‹€. MeteorJSλ₯Ό μ‚¬μš©ν•˜λŠ” κ°€μž₯ 쒋은 이유 쀑 ν•˜λ‚˜λŠ” ν΄λΌμ΄μ–ΈνŠΈμ— λŒ€ν•œ μ™„λ²½ν•œ 계정 ν†΅ν•©μ΄μ—ˆμŠ΅λ‹ˆλ‹€.

FeatherJS 문제λ₯Ό μ‚΄νŽ΄λ³΄λ©΄ λ§Žμ€ μ‚¬λžŒλ“€μ΄ 인증에 κ΄€ν•œ κ²ƒμ΄λ―€λ‘œ 이 μž‘μ—…μ΄ μ°©λ₯™ν•˜κ²Œ λ˜μ–΄ 맀우 κΈ°μ©λ‹ˆλ‹€!

μ˜€λŠ˜λ‚  FeathersJSμ—μ„œ μ™„μ „ν•œ λ³΄μ•ˆ 인증 μ‹œμŠ€ν…œ(둜컬 인증, μ•‘μ„ΈμŠ€ μ œμ–΄, 이메일 λ“±)을 μœ„ν•œ 졜고의 λ¬Έμ„œ(λ˜λŠ” μ°Έμ‘° κ΅¬ν˜„)λŠ” 어디에 μžˆμŠ΅λ‹ˆκΉŒ?

이것이 λ‚΄κ°€ μ§€κΈˆκΉŒμ§€ 가지고 μžˆλŠ” κ²ƒμž…λ‹ˆλ‹€. 더 λ‚˜μ€ 것이 μžˆμŠ΅λ‹ˆκΉŒ?

2018/02 - FeathersJSμ—μ„œ 이메일 확인 μ„€μ •(2017λ…„ 기사 μž¬ν•΄μ‹œ)
2018/02 - μœ„ κΈ°μ‚¬μ˜ 리포지토리
2017/01 - FeathersJSμ—μ„œ 이메일 확인을 μ„€μ •ν•˜λŠ” 방법(손상됨)
2018/06 - Feathersjsλ₯Ό μ‚¬μš©ν•œ Vue 인증

미리 κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€!

이제 λͺ¨λ“  κ΄€λ ¨ λ¬Έμ œκ°€ μ’…λ£Œλ˜μ—ˆμœΌλ©° μ œμ•ˆλœ λͺ¨λ“  λ³€κ²½ 사항이 κ΅¬ν˜„λœ Feathers v4의 μ‹œν—˜νŒμ„ ν…ŒμŠ€νŠΈν•  수 μžˆμŠ΅λ‹ˆλ‹€. μžμ„Έν•œ λ‚΄μš©μ€ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ κ°€μ΄λ“œ λ₯Ό μ°Έμ‘°ν•˜μ„Έμš”.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰

κ΄€λ ¨ 문제

codeus-de picture codeus-de  Β·  4μ½”λ©˜νŠΈ

rstegg picture rstegg  Β·  3μ½”λ©˜νŠΈ

Vincz picture Vincz  Β·  4μ½”λ©˜νŠΈ

harrytang picture harrytang  Β·  3μ½”λ©˜νŠΈ

corymsmith picture corymsmith  Β·  4μ½”λ©˜νŠΈ