# rails6 jwt auth template **Repository Path**: imxtx/rails6-jwt-auth-template ## Basic Information - **Project Name**: rails6 jwt auth template - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-12-02 - **Last Updated**: 2021-12-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README --- author: 谢添鑫 date: 2021-12-02 --- 代码仓库:https://gitee.com/imxtx/rails6-jwt-auth-template ## 1 准备工作 创建一个名为 `auth-test` 的api工程: ```bash rails new auth-test --api ``` API工程需要用到加密和跨域相关的插件,在工程的Gemfile中(不是Gemfile.lock)把下面两个取消注释 - gem 'bcrypt' - gem 'rack-cors' 并添加JWT插件 - gem 'jwt' 像下面这样: ```ruby # Use Active Model has_secure_password gem 'bcrypt', '~> 3.1.7' # Use Rack CORS for handling Cross-Origin Resource Sharing (CORS), making cross-origin AJAX possible gem 'rack-cors' # JWT gem 'jwt' ``` 修改完Gemfile之后,回到工程目录下执行 `bundle install` 安装插件。 ## 2 跨域设置 跨域指的是从一个域访问另一个域的资源,这种行为一般是不允许的,例如从 www.baidu.com 的页面上发送一个资源请求到 www.taobao.com 是不允许的,因为你登录了百度,浏览器当前访问的域中存储了你的个人信息,如果从当前页面发送api请求访问淘宝,淘宝的服务器可能获取你的百度账号里面的信息。同样的,淘宝服务器有自己的资源,可能也不想其他域访问所以会禁止掉跨域。 打开文件 `config/initializers/cors.rb`,把下面代码的注释取消,把 `example.com` 改为 `*` ```ruby Rails.application.config.middleware.insert_before 0, Rack::Cors do allow do origins '*' # 允许所有域访问,后面对接的时候只允许前端所在的域就行了 resource '*', headers: :any, methods: %i[get post put patch delete options head] end end ``` ## 3 路由设置 工程中有三个路由: ```ruby Rails.application.routes.draw do # 注册 post '/register', to: 'users#create' # 登录 post '/login', to: 'users#login' # 自动登录例子,如果用户访问时带了token就自动登录 # 也可以是其他功能,比如返回活动列表, get '/auto_login', to: 'users#auto_login' end ``` ## 4 创建model 创建用户模型(用户名、密码哈希、年龄): ```bash rails g model User username:string password_digest:string age:integer ``` `password_digest` 是用来存储密码哈希的,数据库一般不会存储真实密码,只存储密码哈希,用户登录的时候,后台会计算密码哈希,如果和数据库中一致说明密码正确。这个功能由 bcrypt 插件实现,用户名模型里面必须加上宏 `has_secure_password`,具体看代码。 创建用户控制器: ```bash rails g controller Users ``` 创建/迁移数据库: ```bash rails db:migrate ``` ## 5 运行 克隆代码之后,先执行下面命令安装需要的包 ```bash bundle install ``` 运行服务器: ```bash rails s ```