2017-08-12 1 views
0

Was mache ich falsch? Ich versuche zu bestätigen, dass ein Benutzer nicht existiert. Ich kann nicht herausfinden, wie man @ email1 oder @ 0 sendet. Ich habe es auf verschiedene Arten versucht. Ich kann es zur Arbeit bekommen, wenn ich die WHERE CLAUSE fest codiere. Zum Beispiel ist eine E-Mail, die ich kenne, [email protected] Dies funktioniert: "var userCheck = "SELECT * FROM USR WHERE EMAIL = '[email protected]'".Count()Razor und JS Problem: Überprüfen, ob der Benutzer existiert

Dies tun nicht Arbeit: Ich habe versucht var userCheck = "SELECT * FROM USR WHERE EMAIL = " +email1.Count(); und "var userCheck = "SELECT * FROM USR WHERE EMAIL = @0".Count()

Muss ich email1 als Parameter zu übergeben ???

ASP.NET- Razor:

@{ 
    Page.Title = "Register"; 
    var minPass = 2; 
    var maxPass = 100; 
    var email1 = ""; 
    var pass1 = ""; 
    var db = Database.Open("Resume"); 
    var userCheck = "SELECT * FROM USR WHERE EMAIL = " +email1; 
    var userInsert = "INSERT INTO USR (EMAIL, PSWD) VALUES (@0, @1)"; 


    if(IsPost) { 
     email1 = Request.Form["email1"]; 
     pass1 = Request.Form["pass1"]; 
     db.Execute(userInsert, email1, pass1); 
     Response.Redirect("~/Default"); 
    } 
} 

Javascript:

var error = ""; 
var email1 = document.getElementById('em100').value; 
var email2 = document.getElementById('em101').value; 
var pass1 = document.getElementById('pw100').value; 
var pass2 = document.getElementById('pw101').value; 

if (@userCheck > 0) error += "</br>Email already exists."; // ????????????????? 
if (!document.getElementById('em100').checkValidity()) error += "</br>Emails are not valid."; 
if (email1 !== email2) error += "</br>Emails do not match."; 
if (pass1 !== pass2) error += "</br>Passwords do not match."; 
if (pass1.length < minPass || pass1.length > maxPass) error += "</br>Password must be minPass - maxPass characters."; 
+0

'email1' ist eine leere Zeichenfolge enthalten, wenn Sie Ihre Abfrage aufzubauen. Sollte dir ziemlich offensichtlich sein. Wie auch immer, bilden Sie keine Anfragen, indem Sie Strings miteinander verketten. Das ist ein Rezept für einen SQL-Injection-Angriff. Sie sollten stattdessen parametrisierte Abfragen verwenden. – mason

Antwort

0

ich kommentieren möchte, dass mein Ansatz völlig falsch war.

Ich verwende Javascript nicht mehr zur Validierung, sondern nur ASP.NET Razor.

Für diejenigen, die mit einer ähnlichen Sache kämpfen, unten ist meine Lösung:

Seien Sie sicher, WebSecurity.InitializeDatabaseConnection("ResumeLink", "UserProfile", "UserId", "Email", true);

@{ 
    var username = ""; 
    var password = ""; 
    var confirmPassword = ""; 
    var regMsg = ""; 
    var minPass = 2; 
    var maxPass = 5; 


    if (!IsPost) { 
    if (WebSecurity.IsAuthenticated) { 
     regMsg = String.Format("You are already logged in. (User name: {0})", WebSecurity.CurrentUserName); 
     } 
    } 

    if (IsPost){ 
    WebSecurity.Logout();  
    username = Request["username"]; 
    password = Request["password"]; 
    confirmPassword = Request["confirmPassword"]; 

    try { 
     var mail = new System.Net.Mail.MailAddress(username); 
    } catch { 
     regMsg += "Invalid email format."; 
    } 

    //Validation.Add("username", Validator.Regex(@"^[A-Za-z0-9._%+-][email protected]@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$", regMsg += "Invalid email format.")); 
    if (password != confirmPassword) {regMsg += "</br>Passwords don't match.";} 
    if (WebSecurity.UserExists(username)) {regMsg += String.Format("</br>User '{0}' already exists.", username);} 
    if (password.Length < minPass || password.Length > maxPass) {regMsg += "</br>Password doesn't meet length requirement.";} 
    if (regMsg == "") { 
     WebSecurity.CreateUserAndAccount(username,password,null,false); 
     regMsg = String.Format("{0} created.", username); 
     Response.Write("Registration Successful!"); 
     Response.Redirect("~/Default.cshtml"); 
     } 
    } 
} 

<style>header {visibility: hidden;}</style> 
<body> 
    <div> 
     <h1>Register</h1> 
     <form method="post"> 
      <p> 
       @if(regMsg != ""){ 
        <span class="errorMessage">@Html.Raw(regMsg)</span> 
       } 
      </p> 

      <p> 
       <label for="username">Email Address:</label><br/> 
       <input type="text" name="username" id="username" value='@Request["username"]' /> 
      </p> 
      <p> 
       <label for="password">Password @[email protected] Characters:</label><br/> 
       <input type="password" name="password" id="password" value="" /> 
      </p> 
      <p> 
       <label for="confirmPassword">Confirm Password:</label><br/> 
       <input type="password" name="confirmPassword" id="confirmPassword" value="" /> 
      </p> 
      <p> 
       <input type="submit" value="Submit" /> 
       <input type="button" value="Cancel" onclick="javascript:location.href='Default.cshtml'" /> 
      </p> 
      <p> 
      </p> 
     </form> 
    </div> 
</body> 
Verwandte Themen