rails5 后台入门(api mode)

1. Installation (Centos为例)

1.1安装rvm (http://rvm.io/)

gpg2 --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB

curl -sSL https://get.rvm.io | bash -s stable

1.2安装ruby

rvm install 2.5.3

yum install ruby-dev

1.3 安装rails 

gem install rails

2. Setup

2.1 初始化项目

rails new ProjectName --api  ( --skip-bundle ) 跳过bundle安装

gemfile配置

gem 'mysql2' # 如果是pg安装'pg'
gem 'rack-cors'

安装: bundle install 

2.2 配置数据库

/config/database.yml

default: &default
  adapter: mysql2
  pool: 5
  username: root
  password: pwdpwdpwd
  host: localhost
  charset: utf8
  timeout: 5000

development:
  <<: *default
  database: databaseName

test:
  <<: *default
  database: databaseName2

production:
  <<: *default
  database: databaseName3
View Code

2.3 配置cors

/config/application.rb

config.middleware.insert_before 0, Rack::Cors do
      allow do
        origins 'http://localhost:3000'
        resource '*', :headers => :any, :methods => [:get, :post, :options,:put,:delete], :credentials=> true
      end
    end

 

2.4 配置session和cookie

!  api模式默认不带

/config/application.rb

config.middleware.use ActionDispatch::Cookies
config.middleware.use ActionDispatch::Session::CookieStore

/app/controllers/application_controller.rb


  before_action :set_csrf_cookie
include ActionController::Cookies
include ActionController::RequestForgeryProtection

# 放最后
private  
def set_csrf_cookie
   cookies["CSRF-TOKEN"] = form_authenticity_token
end

3. 简单的用户认证和登录

3.1 创建模型

rails g model User username:string email:string password_digest:string 

3.2 配置模型验证

/app/models/user.rb

validates :password, length: {in: 8..20}
before_save {self.email = email.downcase}
validates :username, presence:true, length: {in: 6..20}
validates :email, presence:true, length: {in: 5..255}, format: {with: /A[w+-.]+@[a-zd-.]+.[a-z]+z/i}, uniqueness:{case_sensitive: false}
has_secure_password

3.3 controller

rails g controller User signin signup

/app/contorllers/application_controller.rb


  helper_method :current_user
def current_user
       @current_user ||= session[:user_id] && User.find(session[:user_id])
end
def require_user render json: {code:-1,info:'login_required'} unless current_user end

/app/controllers/user_controller.rb

  def signup
      @user = User.new(user_params)
      if !@user.valid?
          code = 0
          data = @user.errors.messages
          info = 'bad_for_reasons'
      else
          if @user.save
              code = 1
              info = 'success'
              data = {userId:@user.id,username:@user.username}
          else
             code = 0
             data = ''
             info = 'reason_unknown'
         end
      end
      render json: {code:code, info:info,data:data}
  end

  def signin
      @user = User.find_by_email(params[:email])
      if @user && @user.authenticate(params[:password])
          session[:user_id] = @user.id
          render json: {code:1, info:'success',data:{userId:@user.id,username:@user.username}}
      else 
          render json: {code:0,info:'bad'}
      end
  end

 def destroy # 注销
      session[:user_id] = nil
      render json: {code:1,info:'success'}
 end
    

private 
def user_params
    params.require(:user).permit(:username,:email,:password)
end

 

3.4 配置路由

格式: get 'url', to: 'controller#method'

3.5 启动

rails s

4. 部署

rails s -e production

可能会提示缺少SECRET_KEY_BASE

RAILS_ENV=production rake secret

/etc/profile
export SECRET_KEY_BASE=刚才生成的密钥
source /etc/profile

 更多查看

https://www.cnblogs.com/yxi-liu/p/10331310.html

原文地址:https://www.cnblogs.com/yxi-liu/p/10220500.html