网站制作设计机构,wordpress服务框,邢台网站推广多少钱,宣传片拍摄服务最近刚刚参与一个基于Play框架的管理平台的升级工作#xff0c;其中涉及到了用户的验证工作。第一次接触play框架#xff0c;直接看已有代码#xff0c;有点晕。因此#xff0c;自己实现了一个简单的用户验证功能。 首先#xff0c;新建一个User类#xff0c;包含两个属性…最近刚刚参与一个基于Play框架的管理平台的升级工作其中涉及到了用户的验证工作。第一次接触play框架直接看已有代码有点晕。因此自己实现了一个简单的用户验证功能。 首先新建一个User类包含两个属性包含两个属性email和password。并在构造器中对密码进行了加密。 Entitypublic class User extends Model { Id private String email; private String password; // Constructor public User(String email, String password) { String passwordHash BCrypt.hashpw(password, BCrypt.gensalt()); this.email email; this.password passwordHash; }}接下来新增控制器Application.java其中主要包含包含两个动作和一个表单类Registration。一个动作register()用于显示注册页面另一个动作postRegister处理表单提交的信息并增加相应的数据库记录。Registration则对应注册页面所显示的表格 public class Application extends Controller {public static class Registration {Emailpublic String email;Requiredpublic String password;}public static Result register() {FormRegistration userForm Form.form(Registration.class);return ok(views.html.register.render(userForm));}public static Result postRegister() {FormRegistration userForm Form.form(Registration.class).bindFromRequest();User user new User(userForm.get().email, userForm.get().password);user.save(); return ok(registered); }
}其后新增Rigister所对应的前端页面并在Routes文件中为Appication所对应的动作增加访问路径。 !DOCTYPE html
htmlbodyh1 Registration /h1helper.form(action routes.Application.postRegister()) {helper.inputText(userForm(email))helper.inputPassword(userForm(password))input typesubmit}/body
/htmlRoutes文件 GET /register controllers.Application.register()
POST /register controllers.Application.postRegister()其后访问页面输入用户名和密码可以看到数据库中新增了一条记录。接下来将用户验证的逻辑加入到User类中修改User类新增authenticate()方法。authenticate()接收的是明文密码。上面的验证中首先检查用户邮箱是否存在。如果存在则检查密码是否符合数据库的记录。如果邮箱或者密码错误将返回null。否则返回正确的用户对象。 // Querypublic static Model.FinderInteger, User find new Model.Finder(Integer.class, User.class);// Authentificationpublic static User authenticate(String email, String password) {User user find.where().eq(email, email).findUnique();if (user null) {return user;} else if (BCrypt.checkpw(password, user.password)) {return user;} else {return null;}}接下来进一步修改Application控制器增加两个动作和一个表单类。动作login()用于显示登录页面动作postLogin()用于处理登录表单填写的信息并根据信息决定是否登入用户。Login类对应登录页面的表单。 public static class Login {Emailpublic String email;Requiredpublic String password;public String validate() {if (User.authenticate(email, password) null) {return Invalid user or password;} return null;}}public static Result login() {FormLogin userForm Form.form(Login.class);return ok(views.html.login.render(userForm));}public static Result postLogin() {FormLogin userForm Form.form(Login.class).bindFromRequest();if (userForm.hasErrors()) {return badRequest(Wrong user/password);} else {return ok(Valid user);}}其中在静态类Login中增加了validate()方法并在其中调用User的验证逻辑。正如postLogin()中所示表单的hasErrors()方法将自动检查validate()方法的返回值。如果validate()方法返回为null则说明表单无误。postLogin()的if结构将根据登录是否合法来返回不同的结果。最后同样的在Routes文件中新增两条对应的URL GET /login controllers.Application.login()
POST /login controllers.Application.postLogin()其后访问/login页面并尝试登录。发现已增加了验证功能。 转载于:https://www.cnblogs.com/junjiang3/p/7027893.html