2017-04-02 1 views
0

나는 feathters.js 응용 프로그램을 가지고 있으며 이제는 작성 및 갱신 후크를 보호하려고합니다. 나는 socket.io 클라이언트를 사용하고 현재 JWT를 가고있다. 내가 추가 할 필요가 있다고 생각하는 것을 추가했지만, Error: Authentication token missingError Authenticating을 얻고 있습니다. 나중에 나는 그것이 내 코드에서 온 것임을 이해한다. 백엔드/프론트 엔드 상황이 있습니다.feathers.js -> 인증 토큰 누락

그래서 지금까지 구현 한 내용입니다.

파일 : 백엔드 \ 설정 \ default.json

{ 
    "host": "localhost", 
    "port": 3001, 
    "mysql_connection": "mysql://CONNECTION_STRING", 
    "public": "../public/", 
    "auth": { 
     "idField": "id", 
     "token": { 
      "secret": "SECRET_KEY" 
     }, 
     "local": {} 
    } 
} 

에서 : 백엔드 \의 backend.js는

'use strict'; 

const path = require('path'); 
const serveStatic = require('feathers').static; 
const favicon = require('serve-favicon'); 
const compress = require('compression'); 
const cors = require('cors'); 
const feathers = require('feathers'); 
const configuration = require('feathers-configuration'); 
const authentication = require('feathers-authentication'); 
const hooks = require('feathers-hooks'); 
const rest = require('feathers-rest'); 
const bodyParser = require('body-parser'); 
const socketio = require('feathers-socketio'); 
const middleware = require('./middleware/index'); 
const services = require('./services/index'); 

const appFeathers = feathers(); 

appFeathers.configure(configuration(path.join(__dirname, '..'))); 

appFeathers.use(compress()) 
    .options('*', cors()) 
    .use(cors()) 
    .use(favicon(path.join(appFeathers.get('public'), 'favicon.ico'))) 
    .use('/', serveStatic(appFeathers.get('public'))) 
    .use(bodyParser.json()) 
    .use(bodyParser.urlencoded({extended: true})) 
    .configure(hooks()) 
    .configure(rest()) 
    .configure(socketio()) 
    .configure(services) 
    .configure(middleware) 
    .configure(authentication()); 

module.exports = appFeathers; 

파일 (응용 프로그램의 구성에 대한 백엔드 \를하는 index.js에서 호출) 프론트 엔드의 작동 구성 요소 :

<template> 
    <div class="vttIndex"> 
     idnex.vue 
     todo: eagle.js slideshow 
     todo: first info 
     <ul> 
      <li v-for="message in listMessages"> 
       {{ message }} 
      </li> 
     </ul> 
    </div> 
</template> 

<script> 
    import feathers from 'feathers/client'; 
    import socketio from 'feathers-socketio/client'; 
    import hooks from 'feathers-hooks'; 
    import io from 'socket.io-client'; 
    import authentication from 'feathers-authentication/client'; 
    import * as process from "../nuxt.config"; 

    const vttSocket = io(process.env.backendUrl); 
    const vttFeathers = feathers() 
     .configure(socketio(vttSocket)) 
     .configure(hooks()) 
     .configure(authentication()); 

    const serviceMessage = vttFeathers.service('messages'); 


vttFeathers.authenticate({ 
    type: 'token', 
    'token ': 'SECRET_KEY' 
}).then(function(result){ 
    console.log('Authenticated!', result); 
}).catch(function(error){ 
    console.error('Error authenticating!', error); 
}); 

    export default { 
     layout: 'default', 
     data: function() { 
      return { 
       listMessages: [] 
      } 
     }, 
     mounted: function() { 
      serviceMessage.find().then(page => { 
       this.listMessages = page.data; 
      }); 
      serviceMessage.on('created', (serviceMessage) => { 
       this.listMessages.push(serviceMessage); 
      }); 
     } 
    } 
</script> 

토큰으로 백엔드 json 파일의 비밀 키가 있습니다. 보시다시피 지금은 콘솔 메시지 만 기록하려고합니다. 그것은 내 오류 메시지가 거기에서오고 뭔가를하고있다.

질문

은 어디에서이 기능을 가지고 무엇을 놓치고?

목표이 필요한 이런 경우에

. 내 목표는 모든 '공용'데이터를 클라이언트의 토큰으로 선택하고 관리 섹션을 0auth로 선택하는 것입니다. 따라서 일반적인 'SELECT'항목은 인증이 아닌 토큰을 통해 보호됩니다. 좋아

솔루션

나는 일종의, 그것을 해결. 먼저 사용자를 만들어야했습니다. 그런 다음 사용자와 지역 로그인을해야했습니다. 그러면 토큰이 반환됩니다. 그걸 사용하면 전혀 문제가 없습니다.

+1

가져 왔습니다! 사용자 로그인은 accessToken을 얻는 데 필요한 워크 플로입니다. –

답변

0

토큰을 사용하려면 먼저 토큰을 생성해야합니다. 나는 비공개 키를 토큰으로 사용하고있다. 먼저 '로컬'유형 (기본 이메일 및 비밀번호)으로 인증하면 토큰이 생성되고 '토큰'메소드와 함께 사용할 수 있습니다.