2012-10-03 1 views
0

J'essaye de créer ma propre authentification. Chaque fois que j'essaie de me connecter, et que le nom d'utilisateur n'est pas trouvé dans le datastore GAE, j'obtiens INTERNAL_SERVER_ERROR.Authentification avec GAE Datastore Retourne null sur Entité Utilisateur

Il dit que:

java.lang.NullPointerException 
at com.pawnsoftware.User.authenticate(User.java:16) 
at com.pawnsoftware.UserLoginServlet.doPost(UserLoginServlet.java:24) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 

et ainsi de suite ...

Comment éviter d'avoir cette erreur?

L'erreur est sur la ligne qui dit:

if (user==null) { 
    message = "Username not found."; 
} 

Authentifier l'utilisateur:

public static String authenticate(String username, String password) { 
    String message; 
    Entity user = UserUtil.findUserEntity(username); 
    String pass = user.getProperty("password").toString(); 
    if (user==null) { 
     message = "Username not found."; 
    } else if (user!=null && !password.equals(pass)) { 
     message = "Password is incorrect."; 
    } else if (user!=null && password.equals(pass)) { 
     message = "Successfully logged in!"; 
    } else { 
     message = "Sorry, cannot find the username and password."; 
    } 
    return message; 
} 

Trouver Entité Utilisateur:

public static Entity findUserEntity (String username) { 
    Key userKey = KeyFactory.createKey("User", username); 
    try { 
     return datastore.get(userKey); 
    } catch (EntityNotFoundException e) { 
     return null; 
    } 
} 

Mise à jour sur l'authentification:

public static String authenticate(String username, String password) { 
    String message; 
    Entity user = UserUtil.findUserEntity(username); 
    password = encrypt(password); 
    String pass = ""; 
     try { 
      pass = user.getProperty("password").toString(); 
     } catch (NullPointerException e) { 
      message = "Username not found."; 
     } 
    if (user==null) { 
     message = "Username not found."; 
    } else if (user!=null && !password.equals(pass)) { 
     message = "Password is incorrect."; 
    } else if (user!=null && password.equals(pass)) { 
     message = "Successfully logged in!"; 
    } else { 
     message = "Sorry, cannot find the username and password."; 
    } 
    return message; 
} 

Répondre

0

Vous n'affichez pas si vous obtenez obtenir un EntityNotFoundException et retour null. Ceci, à son tour, peut provoquer une NullPointerException pour la user variable:

user.getProperty("password").toString(); 

Vous pouvez ajouter une déclaration de garde ici:

if (user != null) { 
    pass = user.getProperty("password").toString(); 
} 
+0

Merci pour l'astuce NullPointerException. –

0

Si l'utilisation est nul alors cette ligne échouera:

String pass = user.getProperty("password").toString(); 
+1

Cela ne fournit pas une réponse à la question. Pour critiquer ou demander des éclaircissements à un auteur, laissez un commentaire sous son article. – Jagger

+0

Point pris @Jagger. –