How to get the current user in a user route?

In accordance with this answer, I created my own route so that I can handle file uploads. Here is what I have:

var router = Connect.middleware.router(function(route) {
    route.post('/upload', function(req, res) {
        var filename = req.headers['x-filename'];
        var path = Path.join('.uploads', filename);
        var writeStream = FileSystem.createWriteStream(path);
        writeStream.on('error', function(e) {
            console.error(e);
            res.writeHead(500);
            res.end();
        }).on('close', function() {
            Fiber(function() {
                console.log(Meteor.user());
            }).run();
            res.writeHead(200);
            res.end();
        });
        req.pipe(writeStream);
    });
});
app.use(router);

This is great for downloading files, but when I try to use Meteor.user()it gives me:

app/server/main.js:24
            }).run();
               ^
Error: Meteor.userId can only be invoked in method calls. Use this.userId in publish functions.
    at Object.Meteor.userId (app/packages/accounts-base/accounts_server.js:95:13)
    at Object.Meteor.user (app/packages/accounts-base/accounts_server.js:100:25)
    at app/server/main.js:23:36
Exited with code: 1

I do not see anything in the object reqthat could help me.

Is there a way to access a user object?


I am currently receiving client-side user authentication and passing it through the headers, which I then use for server-side searches:

route.post('/upload', function(req, res) {
    Fiber(function() {
        var userId = req.headers['x-userid'];
        var user = Meteor.users.findOne({_id:userId});
        if(user) {
            ...
        } else {
            res.writeHead(403,'User not logged in');
            res.end();
        }
    }).run();
});

I don’t like it because it’s not safe at all. It would be easy to download something under a different user account.

: Nevermind. Meteor.users.findOne({_id:userId}); - . , ; 700 , .

0
2

.

, Meteor.user().

Meteor.userId.. , .., . ( req.headers ['x-userid'] == Meteor.userId)

Meteor.users.findOne({_ id: userId}); - .

.. , Meteor.users , .

, Meteor.userId( , /), .

+1

, . , Meteor.userId() . var userId = Meteor.userId();, , .

+1

All Articles