2015-12-04 85 views
1

當我發現它不檢查用戶是否存在電子郵件或用戶名時,我正在基於RethinkDB Chat例子的基於Node的登錄/註冊系統上工作這是一個問題。 當我正在尋找解決這個問題時,我無法找出原因,因爲運行數據庫檢查需要使用函數進行回調,這使得實現起來很難。Node.JS Rethink-DB檢查用戶名和電子郵件是否已經存在

if (typeof req.user !== 'undefined') { 
    res.redirect('/account'); 
    return; 
    } 
    if (!validateEmail(req.param('email'))) { 
    req.flash('error', 'Not a valid email address!') 
    res.redirect('/register'); 
    return; 
    } 

    // Add a check for EMAIL/USERNAME here. 

    if (req.param('password') !== req.param('password2')) { 
    req.flash('error', 'Passwords does not match!') 
    res.redirect('/register'); 
    return; 
    } 

我需要它幫助如果用戶使用一個用戶名或電子郵件這是與一個形式,它將發送一個平等的存在:

if (alreadyExists) { 
    req.flash('error', 'That username/email is already in use.') 
    res.redirect('/register'); 
    return; 
    } 

所以,主要的問題是我有了解它是否與其他函數存在於相同的函數中,而不是回調函數中。任何幫助表示讚賞!

回答

0

要檢查具有給定電子郵件地址的用戶是否存在,您必須在您的RethinkDB數據庫中進行檢查,該數據庫是異步的。沒有回調就無法實現,但並不是那麼糟!

var r = require('rethinkdbdash')(); 

function getUserByEmailAddress(emailAddress) { 
    return r.db('test').table('user') 
    .getAll(emailAddress, {index: 'emailAddress'}).run(); 
} 

app.post('/register', function(req, res) { 
    // User already has a session. Not allowed to log in. 
    if(req.user) { 
    return res.redirect('/account'); 
    } else if(!validateEmail(req.body.emailAddress)) { 
    return res.status(500).send('Not a valid email address'); 
    } else if(req.body.password !== req.body.password2) { 
    return res.status(500).send('Passwords do not match'); 
    } 

    getUserByEmailAddress(req.body.emailAddress).then(function(user) { 
    if(user) { 
     res.status(500).send('User with given email address already exists'); 
    } else { 
     // New email address! Encrypt password, add to db, etc. 
    } 
    }) 
} 

請注意,您將不得不爲此創建一個secondary index

你也應該考慮張貼表單的POST-request instead of a GET-request

1

我通常處理這樣的事情是這樣的:我還沒有碰到使用回調這裏的任何問題

User.filter({username:req.body.username}).run().then(function(userArray){ 
    if(userArray[0]){return res.status(500).json({Error : "Username is in use"});} 

。是否有一個特定的原因,你試圖避免它?

編輯:顯然,我的例子中的用戶名替換爲您想要檢查的任何用戶名,在您的電子郵件地址中。 User這裏是我的用戶模型。我也同意Tholle關於使用POST請求。您永遠不想在查詢字符串/ URL中發送用戶的信息/憑證

相關問題