仕事 副業

「Filter chain halted as :authenticate_user! rendered or redirected」の対処法

起こったこと

フロントエンド(React Native)からhandleSubmit関数を実行した際に、サーバーサイド(Rails)で以下のエラーが発生しました。

Started POST "/api/v1/user_touring_groups" for xxx.xxx.y.y at 2023-12-06 21:40:43 +0900
Processing by Api::V1::UserTouringGroupsController#create as JSON
Parameters: {"user_touring_group"=>{"touring_group_id"=>118, "user_id"=>"3"}}
Filter chain halted as :authenticate_user! rendered or redirected
Completed 401 Unauthorized in 1ms (Views: 0.1ms | ActiveRecord: 0.0ms | Allocations: 1099)

handleSubmit関数は以下のとおりで、「post」「delete」に応じてフェッチ先のURLを変更しています。
今回は「post」の際にエラーが発生していました。

const handleSubmit = async (touringGroup, method) => {
let url = 'http://xxx.xxx.y.y:3000/api/v1/user_touring_groups';
if (method.toLowerCase() === 'delete') {
url = `${url}/${touringGroup.id}`;
}

try {
const session = await retrieveUserSession();
if (!session) {
console.error('Session retrieval failed');
return;
}

let requestOptions = {
method: method.toUpperCase(),
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
'access-token': session.token,
'user-id': session.userId,
},
};

console.log(method.toUpperCase())
console.log(session.token)

if (method.toLowerCase() === 'post') {
requestOptions.body = JSON.stringify({ user_touring_group: {
touring_group_id: touringGroup.id,
user_id: session.userId
} });
}

let response = await fetch(url, requestOptions);

if (response.ok) {
console.log('操作成功');
// 追加の処理(必要に応じて)
} else {
if (response.status === 401) {
// 認証失敗時の処理
const errorData = await response.json();
console.error('認証エラー: ', errorData.error);
} else {
// その他のエラー処理
console.error('操作失敗: ステータスコード', response.status);
}
}
} catch (error) {
console.error('操作エラー', error);
}
};

結論

user_touring_groups_controller.rbの冒頭箇所をコード1からコード2に修正したところ、エラーがなくなりました。

コード1

class Api::V1::UserTouringGroupsController < ApplicationController
skip_before_action :verify_authenticity_token
before_action :authenticate_user_from_token!

コード2

module Api
module V1
class UserTouringGroupsController < ApplicationController
include DeviseTokenAuth::Concerns::SetUserByToken
# skip_before_action :verify_authenticity_token
before_action :authenticate_user_from_token!

def create

コード1は古い書き方で、ユーザー認証の段階でDeviseが正常に機能しなかったのだと思います。

-仕事, 副業
-,

Copyright© おすすめ副業で、ゆる~い地方移住@長野県 , 2024 All Rights Reserved Powered by AFFINGER5.