После успешной работы потока аутентификации между 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
Спасибо!