Отправка авторизации в Rails API через React Native (JWT) - PullRequest
0 голосов
/ 14 июля 2020

После успешной работы потока аутентификации между React Native и Rails с использованием JWT, я теперь пытаюсь отправить данные в rails, чтобы изменить информацию в приложении. Это включает в себя отправку HTTP-заголовка с ключом авторизации. Я не уверен, как именно мне нужно отформатировать значение (или нужно ли мне включать как токен аутентификации, так и идентификатор пользователя), так что вроде застрял. Трудно найти информацию об этом, так как это кажется необычной комбинацией стека.

Я включу весь код, который считаю важным.

Это действие для отправки на рельсы. Он отправляет данные profileName, которые я хочу отправить, в параметрах журнала rails server. Обратите внимание на 'Authorization': currentUserToken

 export function changeProfileName( profileName ) {
   return (dispatch, getState) => {
     // I think i need current user.. how to do?
     // const currentUser = getState().user.id
     const currentUserToken = getState().authToken
     fetch ('http://localhost:3000/edit', {
         method: 'POST',
         headers: {
            //what to do here, now user is authorized?
            Accept: 'application/json',
            'Authorization': currentUserToken,
            'Content-Type': 'application/json',
         },
         body: JSON.stringify({
             "name": profileName
         })
     }).then(response => {
        if (response.ok) {
          return response.json().then((data) => {
            console.log(data, 'good')
            dispatch({
                type: 'CONFIRM_PROFILE_NAME_CHANGE'
            });
        });
     }
    })
   }
 }

Это авторизация, которая возвращает ошибку в журнале сервера rails и в чем моя путаница. Как отформатировать запрос, чтобы получить положительный ответ авторизации? Возможно, мне нужно иметь как токен, так и идентификатор пользователя (где идентификатор пользователя - это ключ, а токен - это значение), но я не уверен, как это сделать, так как в магазине user и его атрибуты являются отдельный объект, чем userToken (https://ibb.co/8BwHJpT)

    def auth_header
        #requesting the header type of authorization (with token) that we will declare through our api requests
        # { Authorization: 'Bearer <token>' }
        request.headers['Authorization']
    end

    #what does this mean?
    def decoded_token
        if auth_header
            token = auth_header.split(' ')[1]
            # header: { 'Authorization': 'Bearer <token>' }
            begin
                JWT.decode('s3cr3t', true, algorithm: 'HS256')
            rescue JWT::DecodeError
                nil
            end
        end
    end

    #what does this mean?
    def logged_in_user
        #consults decode_token to check the header for valid information
        if decoded_token
            user_id = decoded_token[0]['user_id']
            @user = User.find_by(id: user_id)
        end
    end

    def logged_in?
        #returns true or false
        !!logged_in_user
    end

    def authenticate_request
        #consults logged_in? see see if user is authorized
        render json: { message: 'Please log in' }, status: :unauthorized unless logged_in?
    end

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...