2016-06-08 5 views
-1

Ich versuche, Benutzer eingegebene Anmeldeinformationen erfassen und verwenden Sie sie als Parameter zum Abfragen einer Datenbank. Leider bin ich ein wenig verloren, wie man diesen Prozess programmiert. Ich benutze eckig, express, node, jQuery und html. Ich bin nicht sehr erfahren mit eckigen, Knoten und jQuery, also vergib mir, wenn das etwas sehr einfaches ist; Ich bin hier um zu lernen. HierWie bekomme ich Params von Http Post und Einfügen

ist die HTML, wo die Formen leben:

<!DOCTYPE html > 
<html ng-app="token"> 
<%include header%> 
<%include navbar%> 
<div ng-controller="TokenCtrl"> 
<form ng-submit="submitLogin(loginForm)" role="form" ng-init="loginForm = {}"> 
<div class="form-group"> 
<label>email</label> 
<input type="email" name="email" ng-model="loginForm.email" required="required" class="form-control"/> 
</div> 
<div class="form-group"> 
<label>password</label> 
<input type="password" name="password" ng-model="loginForm.password" required="required" class="form-control"/> 
</div> 
<button class="btn btn-primary btn-lg" ng-click="handleLoginBtnClick()">Sign in</button> 
</form> 
</div> 
</body> 

Hier ist die JS für die TokenCtrl und Token-Modul, das ein Derivat von ng-Token-auth ist:

var a = angular.module('token', ['ng-token-auth']); 
a.config(function($authProvider) { 
// the following shows the default values. values passed to this method 
// will extend the defaults using angular.extend 

$authProvider.configure({ 
    apiUrl:     '/users', 
    tokenValidationPath:  '/auth/validate_token', 
    signOutUrl:    '/auth/sign_out', 
    emailRegistrationPath: '/auth', 
    accountUpdatePath:  '/auth', 
    accountDeletePath:  '/auth', 
    confirmationSuccessUrl: window.location.href, 
    passwordResetPath:  '/auth/password', 
    passwordUpdatePath:  '/auth/password', 
    passwordResetSuccessUrl: window.location.href, 
    emailSignInPath:   '/auth/sign_in/:email/:password', 
    storage:     'cookies', 
    forceValidateToken:  false, 
    validateOnPageLoad:  true, 
    proxyIf:     function() { return false; }, 
    proxyUrl:    '/proxy', 
    omniauthWindowType:  'sameWindow', 
    tokenFormat: { 
    "access-token": "{{ token }}", 
    "token-type": "Bearer", 
    "client":  "{{ clientId }}", 
    "expiry":  "{{ expiry }}", 
    "uid":   "{{ uid }}" 
    }, 
    cookieOps: { 
    path: "/", 
    expires: 9999, 
    expirationUnit: 'days', 
    secure: false, 
    domain: 'domain.com' 
    }, 
    createPopup: function(url) { 
    return window.open(url, '_blank', 'closebuttoncaption=Cancel'); 
    }, 
    parseExpiry: function(headers) { 
    // convert from UTC ruby (seconds) to UTC js (milliseconds) 
    return (parseInt(headers['expiry']) * 1000) || null; 
    }, 
    handleLoginResponse: function(response) { 
    return response.data; 
    }, 
    handleAccountUpdateResponse: function(response) { 
    return response.data; 
    }, 
    handleTokenValidationResponse: function(response) { 
    return response.data; 
    } 
}); 
}); 
    a.controller('TokenCtrl', function($scope, $auth) { 
    $scope.handleRegBtnClick = function() { 
    $auth.submitRegistration($scope.registrationForm) 
    .then(function(resp) { 
     // handle success response 
    }) 
    .catch(function(resp) { 
     // handle error response 
    }); 
}; 
$scope.handlePwdResetBtnClick = function() { 
    $auth.requestPasswordReset($scope.pwdResetForm) 
    .then(function(resp) { 
     // handle success response 
    }) 
    .catch(function(resp) { 
     // handle error response 
    }); 
}; 
$scope.handleLoginBtnClick = function() { 
    $auth.submitLogin($scope.loginForm) 
    .then(function(resp) { 
     // handle success response 
    }) 
    .catch(function(resp) { 
     // handle error response 
    }); 
}; 
$scope.handleSignOutBtnClick = function() { 
    $auth.signOut() 
    .then(function(resp) { 
     // handle success response 
    }) 
    .catch(function(resp) { 
     // handle error response 
    }); 
}; 
}); 

On Der Ablauf dieser Funktion führt zu dieser URL:

Mit Express, leite ich diese URL zu einer anderen Funktion . Hier ist die Route Code:

app.post('/users/auth/sign_in/:email/:password', routes.verifyusers); 

was dazu führt,

exports.verifyusers= function(req, res) { 
models.user.find({ 
where: { 
    email: req.params.email, 
    password: req.params.password 
} 
}).then(function(user) { 
    if(user) { 
     console.log("alright !") 
    }; 
}); 
}; 

Wenn der Code ausgeführt wird, ist das, was ich in der Konsole:

Executing (default): SELECT "id", "username", "email", "password", "createdAt", "updatedAt" FROM "users" AS "user" WHERE "user"."email" = ':email' AND "user"."password" = ':password' LIMIT 1; 
:email 
:password 

Dies ist Ergebnis ist unabhängig zu den Formulardaten.

+1

Was für ein Problem zu erklären, haben Sie mit dem Code, den du gepostet hast? Ich bin mir nicht sicher, was Ihre Frage ist ... Als Nebenbemerkung sollten Sie Ihr Passwort hashen, bevor Sie es an eine Datenbank senden. – user3

+0

Bitte update, sorry. Wenn ich den Code ausführe, erfassen und füge ich die Formulardaten nicht ein - ich erhalte nur Resultate, die von der URL basieren, die ist: email und: Kennwort –

+0

Ich weiß nicht wollen $ auth.submitLogin tut aber scheint es Rufen Sie die URL genau wie "/ users/auth/sign_in /: email /: password" auf – user3

Antwort

0

denke ich, das Problem kommt von emailSignInPath: '/auth/sign_in/:email/:password',

sollten Sie versuchen, mit

// config 
emailSignInPath: '/auth/sign_in' 

// route declaration 
app.post('/users/auth/sign_in', routes.verifyusers); 

// route action 
exports.verifyusers = function(req, res) { 
    models.user.find({ 
    where: { 
     email: req.body.email, 
     password: req.body.password 
    } 
    }).then(function(user) { 
    if(user) { 
     console.log("alright !") 
    }; 
    }); 
}; 

ps: vergessen Sie nicht, einen Körper-Parser in Ihrer App app.use(express.bodyParser())

+0

Das Ergebnis davon ist: 'Executing (Standard): SELECT" ID "," Benutzername "," E-Mail "," Passwort "," createdAt "," updatedAt "FROM" Benutzer "AS" Benutzer "WHERE" Benutzer "." E-Mail "= NULL UND" Benutzer "." Passwort "= NULL LIMIT 1;' –

+0

Ich bearbeitet, um den bodyparser zu erwähnen, hatten Sie eine Middleware dafür? – user3

+0

Ja, habe ich. Obwohl ich denke, das Problem hier ist, keine Daten für den Parameter zu haben, die wir aus dem Formular bekommen müssen. –

Verwandte Themen