Ich schreibe eine Website, die ein UserManagement-System implementiert, und ich frage mich, welche Best Practices bezüglich der Formularverarbeitung ich berücksichtigen muss.Best Practices Formularverarbeitung mit Express
Vor allem Leistung, Sicherheit, SEO und User Experience sind mir wichtig. Als ich daran arbeitete, stieß ich auf ein paar Fragen und ich fand keinen vollständigen Knoten/Expresscode-Ausschnitt, wo ich alle meine unten stehenden Fragen herausfinden konnte.
Anwendungsfall: Jemand wird den Geburtstag seines Profils aktualisieren. Im Moment mache ich eine POST-Anfrage an dieselbe URL, um das Formular auf dieser Seite zu bearbeiten, und die POST-Anfrage antwortet mit einer 302-Weiterleitung auf die gleiche URL.
Allgemeine Fragen über die Formularverarbeitung:
- Sollte ich eine POST-Anforderung + 302 umleiten für Formularverarbeitung oder lieber etwas anderes wie eine AJAX-Anforderung?
- Wie soll ich mit ungültigen FORM-Anfragen umgehen (z. B. ungültige Anmeldung oder E-Mail-Adresse wird bereits bei der Anmeldung verwendet)?
Express spezifische Fragen über die Formularverarbeitung:
Ich gehe davon aus, bevor irgendetwas in meine DB Einsetzen Ich brauche alle Formularfelder auf der Serverseite zu sanieren und zu validieren . Wie würdest du das machen?
Ich habe ein paar Dinge über CSRF gelesen, aber ich habe noch nie einen CSRF-Schutz implementiert. Ich würde mich freuen, dass im Code-Ausschnitt auch
Ich muss mich um andere mögliche Sicherheitslücken kümmern bei der Verarbeitung von Formularen mit Express?
Beispiel HTML/Mops:
form#profile(method='POST', action='/settings/profile')
input#profile-real-name.validate(type='text', name='profileRealName', value=profile.name)
label(for='profile-real-name') Name
textarea#profile-bio.materialize-textarea(placeholder='Tell a little about yourself', name='profileBio')
| #{profile.bio}
label(for='profile-bio') About
input#profile-url.validate(type='url', name='profileUrl', value=profile.bio)
label(for='profile-url') URL
input#profile-location.validate(type='text', name='profileLocation', value=profile.location)
label(for='profile-location') Location
.form-action-buttons.right-align
a.btn.grey(href='' onclick='resetForm()') Reset
button.btn.waves-effect.waves-light(type='submit')
Beispiel Strecke Handlers:
router.get('/settings/profile', isLoggedIn, profile)
router.post('/settings/profile', isLoggedIn, updateProfile)
function profile(req, res) {
res.render('user/profile', { title: 'Profile', profile: req.user.profile })
}
function updateProfile(req, res) {
var userId = req.user._id
var form = req.body
var profile = {
name: form.profileRealName,
bio: form.profileBio,
url: form.profileUrl,
location: form.profileLocation
}
// Insert into DB
}
Hinweis: Ein kompletter Code-Schnipsel, die Pflege aller Form der Verarbeitung nimmt am besten Praktiken, die an das gegebene Beispiel angepasst sind, werden sehr geschätzt. Mir geht es gut mit jeder öffentlich verfügbaren Express-Middleware.
Vielen Dank, dass Sie sich die Zeit genommen haben. Stört es Sie, wenn Sie ein reales Code-Beispiel zeigen, das zeigt, wie Sie ein Formular sanieren und validieren? Das würde mir helfen, Ihre Herangehensweise zu verstehen. Ich benutze Mungo, falls du dich fragst. – kentor
Ich mag Mungo ziemlich viel nicht, so leid nein. –