最近刚刚参与一个基于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() {Form<Registration> userForm = Form.form(Registration.class);return ok(views.html.register.render(userForm));}public static Result postRegister() {Form<Registration> 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>
<html><body><h1> Registration </h1>@helper.form(action = routes.Application.postRegister()) {@helper.inputText(userForm("email"))@helper.inputPassword(userForm("password"))<input type="submit">}</body>
</html>

Routes文件:
GET     /register                   controllers.Application.register()
POST    /register                   controllers.Application.postRegister()

其后,访问页面,输入用户名和密码,可以看到数据库中新增了一条记录。接下来,将用户验证的逻辑加入到User类中,修改User类,新增authenticate()方法。authenticate()接收的是明文密码。上面的验证中,首先检查用户邮箱是否存在。如果存在,则检查密码是否符合数据库的记录。如果邮箱或者密码错误,将返回null。否则返回正确的用户对象。
// Querypublic static Model.Finder<Integer, 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() {Form<Login> userForm = Form.form(Login.class);return ok(views.html.login.render(userForm));}public static Result postLogin() {Form<Login> 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

Play框架的用户验证。相关推荐

  1. php验证密码后跳转_php-laravel框架用户验证(Auth)模块解析(四)忘记密码

    一.忘记密码模块路由 二.控制器解析 跟注册.登录的控制器一样,大部分的逻辑使用trait引入. ForgotPasswordController:负责忘记密码页面,以及邮件发送 四.扩展开发:自定义 ...

  2. 前后端分离的用户验证原理及Spring Boot + JWT的框架搭建(附完整的框架代码)之二

    本篇承接上一篇,关于Session以及JWT Token参考: 前后端分离的用户验证原理及Spring Boot + JWT的框架搭建(附完整的框架代码)之一 框架整体描述 框架使用Spring Bo ...

  3. AI框架外部用户贡献代码

    AI框架外部用户贡献代码 概述 飞桨是百度自主研发的一款开源的深度学习框架,是主流深度学习框架中首个完全国产化的产品,已经在农业.医疗.林业.科研.服务等领域成功应用.无论是已入职场的深度学习从业者. ...

  4. 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用

    使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)--创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)--使用蓝图功能进行模块化 使用 Flask 框架写用 ...

  5. MVC框架实现用户登录注册功能(连接数据库)

    目录 一.简单理解MVC框架 二.项目结构 三.项目源码 3.1 User 3.2 UserDao 3.3 RegisterDao 3.4 servletControll 3.5 servletCon ...

  6. 基于layui框架的登录验证

    基于layui框架的登录验证 开发工具:idea,tomcat,ssm框架,以及引入的layui 一些关于框架的搭建在此略过,以后可能会发布一些相关文章 这里只改变了背景图片,是一个现成的页面 //f ...

  7. 自定义用户验证控件CustomValidator

    背景:VisualStudio2005; 使用自定义控件判断注册用户名是否已经存在: 实现: html: <%@ Page Language="C#" AutoEventWi ...

  8. django 的用户验证及登录状态保持

    一.用户验证功能 Django自带用户验证及登录功能,引入模块为: from django.contrib.auth import authenticate 其中方法authenticate()的接收 ...

  9. SVN用户验证,调错

    昨天上午刚研究了一会svn,下午同事就要用,搭建完成后想通过用户验证同步数据.但是配置过程中遇到了问题,现在解决了,总结一下. 首先把正确的配置文件贴出来,如下: 创建一个版本库 Svnadmin c ...

最新文章

  1. poj1068解题报告(模拟类)
  2. 电子科技学院计算机调剂,2020年电子科技大学电子科学技术研究院考研调剂信息...
  3. r语言 去除双引号_tidyfst vs pandas(12):去除重复条目
  4. java api中最常用的五个包_java 5 个常用的api包
  5. verilog的学习
  6. Linux下出现ping:unknown host xxx.xxx问题的解决办法
  7. discuz MVC结构分析
  8. android ListView控件滑动时出现黑色背景问题解法方案
  9. 2017.4.21 2^k进制数 思考记录
  10. 【GISER Painter】矢量切片(Vector tile)番外一:Proj4js
  11. Python笔记之读取yaml文件
  12. OpenGL基础21:材质
  13. Canvas 通过改变渐变色渐变百分比位置做飞线效果
  14. ps中批处理图片压缩
  15. 后端面试(一)计算机网络相关
  16. python颜色参数palette_数据可视化Seaborn从零开始学习教程(二) 颜色调控篇
  17. Autosar CPU core trust/Nontrust配置
  18. ACM训练史上最详细计划(大神养成记)
  19. [已解决]vscode环境 ros系统 msg文件不生成.h文件
  20. Android Architecture Components

热门文章

  1. 为什么支付宝不提供房贷业务?原因在这里
  2. Chapter 7:Statistical-Model-Based Methods
  3. 猪年看猪,猪男猪女一共十个。
  4. ISERDES Guidelines
  5. 华为鸿蒙一再延期,华为P50再次延期,鸿蒙系统正式版加持,有望与新平板一同登场...
  6. 视频图像处理平台对比_对比传统智能结算,戈子视觉结算有了质的改变
  7. html文本设置float,css怎么float(浮动)?
  8. java在虚拟机下的安装_centos 虚拟机下安装 Java方法
  9. 听技术播客:一边学Python编程一边学英语
  10. mysql_表_操作