meteor - tutorial - iron router
Meteor Iron-enrutador del lado del servidor solo ruta cómo obtener el usuario actual? (2)
Esto funciona para mí en 0.8:
if(this.request.cookies.meteor_login_token) u = Meteor.users.findOne({"services.resume.loginTokens.hashedToken": Accounts._hashLoginToken(this.request.cookies.meteor_login_token)});
Básicamente, has hashing el token de inicio de sesión de Meteor en bruto con la función Accounts._hashLoginToken()
que permite la coincidencia con el token hash almacenado en el DB.
Para una ruta de solo servidor, ¿cómo puedo obtener el usuario actual?
Tenga en cuenta que esta es una ruta que se ve así:
this.route(''report_access'', {
path: ''/report/:humanId?/:reportKey'',
where: ''server'',
action: ....
});
Esto no está en una llamada de publicación o método, por lo que Meteor.user () / Meteor.userId () falla.
Busqué en la ruta.parámetros y no hay ningún conjunto de usuario.
En realidad, no puede hacer esto en el lado del servidor sin configurar cookies en el lado del cliente cuando inicia sesión.
Meteor almacena el token de autenticación del usuario en localStorage que no está disponible en la etapa del encabezado HTTP, solo después de que la página se carga en el lado del cliente javascript.
Si desea acceder al valor en los encabezados de la manera en que lo hace, tendría que establecer una cookie cuando el usuario inicie sesión con el token del usuario.
El token de los usuarios está en localstorage / Meteor.loginToken
y el Id de usuario en Meteor.userId()
.
Luego, verifique este valor con el encabezado de solicitud y encuentre el token entre los tokens almacenados del usuario en la colección de users
en mongodb en services.resume.loginToken
.
Hay una advertencia de seguridad considerable para hacer esto porque su LoginToken está más expuesto y podría usarse para obtener acceso a la cuenta.
¿Cómo funciona Meteor con los inicios de sesión?
Meteor establece una conexión DDP sobre websockets. Cuando la página web ha cargado con un estado de inicio de sesión "guardado" previo, estos LoginTokens se leen usando javascript con la API localstorage. DDP es una capa de comunicaciones sobre websockets o sockjs que Meteor usa para comunicarse con el servidor.
El inicio de sesión se produce a través del protocolo DDP, después de que el javascript se haya cargado. Esta es la razón principal por la que no puede hacer esto directamente con una ruta del lado del servidor porque no tendría acceso a DDP de esta manera ya que las bibliotecas de Meteor no están disponibles y no se establece una conexión DDP en este momento cuando se envía la solicitud http.
Los métodos de llamada y suscripción de Meteor usan este inicio de sesión para autenticarse para publicar métodos en el servidor, todo ocurre en el cable DDP.
Esta respuesta debe entrar en los detalles de cómo se realiza un inicio de sesión: autenticarse con Meteor a través de DDP (¿y SRP?)