专栏首页氧化先生的专栏rails api+react+jwt验证教程
原创

rails api+react+jwt验证教程

1.生成railsAPI项目

rails new 项目名 --datebase=postgresql

2.创建model的User模型,username与密码字段

rails g model user username password_digest

3.生成user的控制器与创建动作页

rails g controller users create

4.注释掉Gemfile中的bcrypt,并添加jwt gem包

gem 'bcrypt', '~> 3.1.7'
gem 'jwt'

5.在models的application_record.rb中添加has_secure_password字段

class User < ApplicationRecord
  has_secure_password
end

6.在applicatio_controller.rb中添加如下字段:

class ApplicationController < ActionController::Base
  protect_from_forgery except: :create
end

7.bundle intsall

8.创建数据库并迁徙

rails db:create db:migrate

9.路由设置

resources:users

10.users_controller添加

class UsersController < ApplicationControlle
  def create
      input = User.new(params.permit(:username, :password))
    if(input.save)
      :ok
    else
      :bad_request
     end
  end
end

11.创建token控制器与create动作

rails g controller tokens create

12.路由中

Rails.application.routes.draw do
 
  get 'tokens/create'
  resources :users
  resources :tokens, only: [:create] 
  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end

13,tokens控制器

class TokensController < ApplicationController
  def create

  	user = User.find_by(username: params[:username])
  	
  	if user&.authenticate(params[:password])
  	  render json: {
        jwt: encode_token({id: user.id, username: user.username})
  	  }
    else
     head :not_found
    end
   end

  private 

  def encode_token(payload={})
    exp = 24.hours.from_now
    payload[:exp] = exp.to_i
    JWT.encode(payload, Rails.application.credentials.fetch(:secret_key_base))
  end

end

14.生成新密钥

rails secret

15.使用vim编辑密钥

EDITOR=vim bin/rails credentials:edit

16.配置

require_relative 'boot'

require 'rails/all'

# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
Bundler.require(*Rails.groups)

module Jwt
  class Application < Rails::Application
    # Initialize configuration defaults for originally generated Rails version.
    config.load_defaults 5.2

    config.generators.system_tests = nil

    config.middleware.insert_before 0, Rack::Cors do
      allow do
          origins '*'
          resource '*',headers: :any, methods: [
          :delete, :put, :patch, :get, :psot, :options



          ]
        
    end

    # Settings in config/environments/* take precedence over those specified here.
    # Application configuration can go into files in config/initializers
    # -- all .rb files in that directory are automatically loaded after loading
    # the framework and any gems in your application.
  end
end

17.生成react

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 人工智能与自然语言处理概述:AI三大阶段、NLP关键应用领域

    AI 指代「人工智能」,是让机器能够像人类一样完成智能任务的技术。AI 使用智能完成自动化任务。

    不知雨
  • 在腾讯云上搭建 Hadoop 完全分布式集群

    搭建完全分布式的 Hadoop 集群,需要三台同号同区腾讯云服务器,配置可根据所需求自行加减,三台系统为 CentOS 6.5 64位。

    不知雨
  • 前端下半场:构建跨框架的 UI 库

    跨框架的 UI 库,即前端 UI 库可以不经任何修改,直接能运行在 React、Angular、Vue 等框架上。

    不知雨
  • House of Roman 学习记录

    该技术通过12-bit的暴力破解来get shell。同时需要目标程序存在UAF漏洞,同时能够分配出unsorted bin 和 fastbins。

    0x222进制
  • 新手RoR十分钟初体验Step By Step

    1、安装Ruby Windows用户去 http://rubyforge.org/ 的 http://rubyforge.org/projects/rubyi...

    阿敏总司令
  • Objective-C 工厂模式(上) -- 简单工厂模式

    简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对...

    周希
  • 音视频小白系统入门常见问题解决办法

    同学们在学习视频课小白系统入门这门课的过程中,经常遇到一些问题,这里总结一些最常见的问题,供大家参考:

    音视频_李超
  • Spring框架系列之AOP思想

    微信公众号:compassblog 欢迎关注、转发,互相学习,共同进步! 有任何问题,请后台留言联系! 1、AOP概述 (1)、什么是 AOP AOP 为 As...

    compassblog
  • (译)为容器提供更好的隔离:沙箱容器技术概览

    既然主流 IT 工业都在采用基于容器的基础设施(云原生方案),那么了解这一技术的短板就很重要了。Docker、LXC 以及 RKT 等传统容器都是共享主机操作系...

    崔秀龙
  • 0543-5.15.0-Kerberos环境下Kafka管理工具Kafka Eagle安装使用

    Fayson在前面的文章介绍了《如何在CDH集群安装Kafka Manager》和《0542-6.1.0-非安全环境下Kafka管理工具Kafka Eagle安...

    Fayson

扫码关注云+社区

领取腾讯云代金券