2017-10-20 12 views
0

문서에서이를 수행하는 방법을 찾을 수 없으며 스택 오버플로에 대해서도 살펴 보았습니다. 사용자가 로그인하기 전에 API에서 내 JSON 응답의 제한된보기를 보여주고 싶습니다.인증이 제공되지 않을 때 Loopback으로부터 제한 응답 받기

예를 들어 온라인 판매를 원하는 전자 책이 있습니다. 나는 로그인하지 않을 때 책의 미리보기 링크 (epubFile.notAuthoried)와 로그인 할 때 책의 전체 링크 (epubFile.authorized) 만보기를 원합니다. 두 링크는 ​​모두 동일한 테이블에 표시됩니다.

[ 
    { 
    "title": "string", 
    "subTitle": "string", 
    "isPublished": true, 
    "publicationDate": "2017-10-20T11:07:31.258Z", 
    "epubFile": { 
     "notAuthorized": "filename-noauth.epub" 
     "authorized": "filename-auth.epub" 
    } 
    "id": "string", 
    "createdOn": "2017-10-20T11:07:31.258Z", 
    "updatedOn": "2017-10-20T11:07:31.258Z" 
    } 
] 

루프백의 API 끝점에서 입력란을 필터링 할 수 있습니까? 아니면 새로운 맞춤 API 엔드 포인트를 만들어야합니까? 첫째

답변

2

둘 다 공인 인증되지 않은 사용자가

{  
    "name": "eBook", 
    "base": "PersistedModel", 
    [...] 
    "acls": [ 
    "accessType": "READ", 
    "principalType": "ROLE", 
    "principalId": "$everyone", 
    "permission": "ALLOW", 
    "property":["find", "findById] 
    ] 
} 

다음을 호출 할 수 있도록 모든 사람을 $하기 위해 findfindById 방법에 대한 권한을 설정해야합니다, 당신은 원격으로 후크해야합니다 HTE 사용자가 로그인 또는 나는 아직도 루프백에서 조금 안돼서 그냥 있기 때문에하지

const previewProperites = ['title', 'subTitle', etc...] 
Ebook.afterRemote('find', (ctx, ebooks, next) => { 
    // pseudo code 
    if(!ctx.options.accessToken){ 
    // no user logged in, only keep preview properties 
    ebooks.forEach(book => { 
     // get the properties of the book 
     var eBookProperties = Object.keys(book.__data); 

     eBookProperties.forEach(bookProp =>{ 
     if(!previewProperties.some(pProp => pProp === bookProp)){ 
      // ebook property not in preview list, so remove it 
      delete book.__data[bookProp]; // .__data is where loopback keeps its actual data 
     } 
     }); 
    }); 
    } 
    next(); 
} 
+0

이, 후크, 올바른 일반/모델에서 ebook.js에 배치되는 경우 방법과 수정이 응답에 따라? 내일 제안 된 솔루션을 시도해 보겠습니다. @ YeeHaw1234에 대한 답변과 텍스트 halfer의 문법 수정에 감사드립니다. – NIKRI

+1

ebook.js 파일에 코드를 삽입 할 수 있지만 더 쉽습니다. 폴더 (/ common/models/ebook /)를 만들고 기능의 각 비트에 대한 .js 파일 (/ebook/hidePropertiesForPreview.js)을 만들면 코드를 깨끗하게 유지하십시오. 그런 다음 ebook.js 파일에서이 새로운 .js 파일을 요구하고 호출하십시오. – YeeHaw1234