사용자가 로그인했는지 서버 측 경로에서 어떻게 확인할 수 있습니까?Iron-router 서버 측의 Meteor.user()
'before'에 체크를 추가 하겠지만 Metor.user()는 여기서 작동하지 않습니다.
미리 감사드립니다.
p.s. How to get Meteor.user() to return on the server side?을 찾았지만 철제 라우터에서 작동하지 않습니다.
사용자가 로그인했는지 서버 측 경로에서 어떻게 확인할 수 있습니까?Iron-router 서버 측의 Meteor.user()
'before'에 체크를 추가 하겠지만 Metor.user()는 여기서 작동하지 않습니다.
미리 감사드립니다.
p.s. How to get Meteor.user() to return on the server side?을 찾았지만 철제 라우터에서 작동하지 않습니다.
나는 이것이 가능하지 않을까 걱정됩니다. 이 문제는 두 가지 다른 프로토콜 (문자 그대로 또는 논리적)을 사용하여 서버에 연결하려고한다는 사실에서 비롯된 것입니다. 따라서이 두 가지 작업을 관련시키는 확실한 방법은 없습니다.
그러나 사용자의 요구에 맞는 매우 간단한 솔루션이 있습니다. 당신은 특권 토큰이나 비밀 키 등의 간단한 시스템을 개발해야합니다. 첫째, HTTP
헤더 내에서 또는 URL
그 자체로 하나, 당신은 지금 당신의 AJAX
요청 (또는 무언가)에 부착 secretKey
를 얻기 위해 클라이언트에서 사용할 수 있습니다, 그리고 서버 방법
var Secrets = new Meteor.Collection("secrets"); // only on server!!!
Meteor.methods({
getSecretKey: function() {
if (!this.userId)
// check if the user has privileges
throw Meteor.Error(403);
return Secrets.insert({_id: Random.id(), user: this.userId});
},
});
을 만들 수 있습니다. 두려워하지 마라! HTTPS
을 사용하는 경우 모두 암호화됩니다.
서버 측에서는 들어오는 요청에서 secretKey
을 검색하고 Secrets
컬렉션에 있는지 확인할 수 있습니다. 사용자에게 특정 권한이 부여되었는지 여부를 알 수 있습니다. 또한 보안상의 이유로 잠시 후 컬렉션에서 비밀 키를 제거 할 수 있습니다.
설명 및 솔루션을 주셔서 감사합니다 – elbowz
여기 예제 : https://github.com/apendua/meteor-uploader/blob/master/server.js 서버 측 경로에 connectHandlers를 사용하고있는 것 같습니다. 서버 측 경로에도이 방법을 권장할까요? Iron Router를 사용하고 있으며 토큰으로 수행중인 작업에 접근 할 수 있는지 알고 싶습니다. – Aaron
또한 귀하의 솔루션 (링크에 있음)에 토큰 또는 토큰의 만료를 저장하는 데이터베이스가 포함되어 있지 않음을 알았습니까? – Aaron
당신이하고자하는 일은 IronRouter.route()의 컨텍스트 내에서 요청을하는 Meteor.user를 인증하는 것입니다. 요청은 헤더에 유효한 사용자 ID 및 인증 토큰을 사용하여 이루어져야합니다. 내가 Router.route() 내에서이 함수를 호출하는 다음 this.user 나에게 액세스 할 수 있습니다 :
###
Verify the request is being made by an actively logged in user
@context: IronRouter.Router.route()
###
authenticate = ->
# Get the auth info from header
userId = this.request.headers['x-user-id']
loginToken = this.request.headers['x-auth-token']
# Get the user from the database
if userId and loginToken
user = Meteor.users.findOne {'_id': userId, 'services.resume.loginTokens.token': loginToken}
# Return an error if the login token does not match any belonging to the user
if not user
respond.call this, {success: false, message: "You must be logged in to do this."}, 401
# Attach the user to the context so they can be accessed at this.user within route
this.user = user
###
Respond to an HTTP request
@context: IronRouter.Router.route()
###
respond = (body, statusCode=200, headers={'Content-Type':'text/json'}) ->
this.response.writeHead statusCode, headers
this.response.write(JSON.stringify(body))
this.response.end()
이 코드는 크게 RestStop 및 RestStop2에 의해 영감을했다. Meteor 0.9.0+ (Iron Router 위에 구축 됨)에 REST API를 작성하기위한 유성 패키지의 일부입니다. 나는이 작업을 얻으려고 노력했다
뿐만 아니라,하지만하지 않았다 : 당신은 여기에 완전한 소스 코드를 확인할 수 있습니다. 나는 Meteor 방법을 쓰는 것을 끝내었다. 이것은 이상적인 것은 아니지만 적어도 제 경우에는 제 문제에 대한 실행 가능한 해결책이었습니다. –