Login with Play! framework

Asked

Viewed 110 times

1

I am trying to create a login system on the system but I have the following problem:

public Result salvaNovoUsuario() {
    Form<Usuario> formulario = 
    formularios.form(Usuario.class).bindFromRequest();

    if (validadorDeUsuario.temErros(formulario)) {
        flash("danger", "Existem erros no preenchimento do cadastro");
        return badRequest(formularioDeNovoUsuario.render(formulario));
    }

    Usuario usuario = formulario.get();
    String criptoSenha = BCrypt.hashpw(usuario.getSenha(), 
    BCrypt.gensalt(-1));
    usuario.setSenha(criptoSenha);
    usuario.save();
    TokenDeCadastro token = new TokenDeCadastro(usuario);
    token.save();
    enviador.send(new EmailDeCadastro(token));
    flash("success", "Um email foi enviado para confirmar seu cadastro!");
    return redirect(routes.UsuarioController.formularioDeNovoUsuario());
}

This method works and saves an encrypted password in the bank, but in the login happens it generates a random hash so I can’t log in.

public Result fazLogin() {
    DynamicForm formulario = formularios.form().bindFromRequest();
    String email = formulario.get("email");
    String senha = BCrypt.hashpw(formulario.get("senha"), BCrypt.gensalt());
    Optional<Usuario> possivelUsuario = usuarioDAO.comEmailESenha(email, 
    senha);
    if (possivelUsuario.isPresent()) {
        Usuario usuario = possivelUsuario.get();
        if (usuario.isVerificado()) {
            session(AUTH, usuario.getEmail());
            usuario.update();
            flash("success", "Login foi efetuado com sucesso!");
            return redirect(routes.UsuarioController.painel());
        }
        else {
            flash("warning", "Usuario ainda nao confirmado! Confirma seu 
     email!");
        }
    }
    else {
        flash("danger", "Credenciais invalidas!");
    }
    return redirect(routes.UsuarioController.formularioDeLogin());
}

Is there any way to save the password that was set and use it in the login since I will never have the same hash?

1 answer

1

I figured out the solution, generate a salt static passing a string:

public static String salt = "string aleatória";

Or not hashing during login:

public Result fazLogin() {
    DynamicForm formulario = formularios.form().bindFromRequest();
    String email = formulario.get("email");
    String senha = formulario.get("senha");

    Optional<Usuario> possivelUsuario = usuarioDAO.comEmail(email);

    if (possivelUsuario.isPresent()) {
        Usuario usuario = possivelUsuario.get();
        if (usuario.isVerificado() && BCrypt.checkpw(senha, usuario.getSenha())) {
            session(AUTH, usuario.getEmail());
            flash("success", "Login foi efetuado com sucesso!");
            return redirect(routes.UsuarioController.painel());
        }
        else if(!usuario.isVerificado()){
            flash("warning", "Usuario ainda nao confirmado! Confirma seu email!");
        }
    }
    else {
        flash("danger", "Credenciais invalidas!");
    }
    return redirect(routes.UsuarioController.formularioDeLogin());
}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.