Sou*_*nka 5 ruby-on-rails devise reactjs
我正在使用devise-jwt为后端使用 rails ,并对前端部分做出反应。
我正在关注这个https://github.com/waiting-for-dev/devise-jwt/blob/master/README.md
我的 routes.rb 文件包含:
Rails.application.routes.draw do
# remove this in production
require 'sidekiq/web'
mount Sidekiq::Web => '/sidekiq'
namespace :api, defaults: { format: 'json' } do
namespace :v1 do
devise_for :users, :controllers => {sessions: 'api/v1/sessions', registrations: 'api/v1/registrations'}
end
end
end
Run Code Online (Sandbox Code Playgroud)
我的 registrations_controller.rb (app/controllers/api/registrations_controller.rb)
class Api::V1::RegistrationsController < Devise::RegistrationsController
respond_to :json, :controllers => {sessions: 'sessions', registrations: 'registrations'}
before_action :sign_up_params, if: :devise_controller?, on: [:create]
def create
build_resource(sign_up_params)
if resource.save
render :json => resource, serializer: Api::V1::UserSerializer, meta: { message: 'Sign up success', token: request.headers["Authorization"] }, :status => :created
else
render :json => resource, adapter: :json_api, serializer: ActiveModel::Serializer::ErrorSerializer, meta: { message: 'Sign up success' }, :status => :created
end
end
protected
def sign_up_params
params.require(:sign_up).permit(:first_name, :last_name, :mobile, :email, :password, :password_confirmation)
end
end
Run Code Online (Sandbox Code Playgroud)
我的 session_controller.rb (app/controllers/api/sessions_controller.rb)
class Api::SessionsController < Devise::SessionsController
respond_to :json
end
Run Code Online (Sandbox Code Playgroud)
我的 application_controller.rb (app/controllers/application_controller.rb)
class ApplicationController < ActionController::Base
end
Run Code Online (Sandbox Code Playgroud)
基本上下一步将是什么。我很迷惑。我将如何获取访问令牌并使用它在前端反应部分进行身份验证。
假设您已进行服务器端设置,响应将包含一个Authorization Header.
在前端,您将发出登录请求并进行回调以捕获响应:
window.fetch(LOGIN_URL, dataWithLoginInfo).then(response => {
const jwt = response.headers.get('Authorization').split('Bearer ')[1];
window.sessionStorage.setItem('jwt', jwt);
}).catch(handleError)
Run Code Online (Sandbox Code Playgroud)
接下来发出包含标头的请求Authorization:
const token = window.sessionStorage.getItem('jwt')
const headers = { Authorization: `Bearer ${token}` }
Run Code Online (Sandbox Code Playgroud)
或者在解码后在您的应用程序中使用它:
import jwt from 'jsonwebtoken';
const decodedToken = jwt.decode(window.sessionStorage.getItem('jwt'));
if (decodedToken.isAdmin) {
return <AdminPage />;
} else {
return <NotAdminPage />;
}
Run Code Online (Sandbox Code Playgroud)
您将使用类似https://www.npmjs.com/package/jwt-decode或https://www.npmjs.com/package/jsonwebtoken的内容之类的内容来解码令牌并从中读取信息,例如 id、角色、权限等
您确实需要遵循以下教程:https://auth0.com/blog/secure-your-react-and-redux-app-with-jwt-authentication/或http://jasonwatmore.com/post/2017/ 12/07/react-redux-jwt-authentication-tutorial-example。然后请当地专家查看您的所有代码。
| 归档时间: |
|
| 查看次数: |
7860 次 |
| 最近记录: |