作成日:2022-12-13 ・更新日:2023-07-25
ログインを維持している状態、初めて訪れている場合のみ、再度ページを開く等状態を保存するcookieを利用して、表示を変更させます。
react-cookieを利用してcookieの制御を行います。
react-cookieを利用しクッキーの追加削除、有効期限を設定します。
使い方がとても簡単なのでよく使っています。
cookieの代表的な使用用途として
ダウンロードはnpmでダウンロードを行います。
npm install react-cookie
import reportWebVitals from './reportWebVitals';
import { CookiesProvider } from 'react-cookie'; //<--これ
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<React.StrictMode>
<CookiesProvider> {/*<--これ*/}
<App />
</CookiesProvider> {/*<--これ*/}
</React.StrictMode>
);
import { useCookies } from "react-cookie";//<--import
function App() {
const [cookies, setCookie, removeCookie] = useCookies(['']);//--init
return(
{/*
.....
*/}
)
}
function App() {
//クッキー追加ファンクション
const Setcookiesfunction =(()=>{
setCookie("key","値");
})
}
ちなみにこのuseCookiesの変数はなんでも可、順番だけは守ってください。以下のコードでも動きます。
//const [cookies, setCookie, removeCookie] = useCookies(['login']);
const [kukki-yomikomi, kukki-touroku, kukki-sakujo] = useCookies(['login']);<--これでも可
//このようにした場合クッキーの値追加も次のように設定します。
kukki-touroku("key","値");
const [cookies, setCookie, removeCookie] = useCookies(['login']);
このように useCookies()のかっこ内の値はオプションです。ここで指定されたクッキーが更新された時画面のレンダリングが発生します。
しかし、何も設定しない場合は、クッキーのどれかの値が更新されるたびに、画面の再レンダリングが発生してしまうので、何か値を入力しください。
const [cookies, setCookie, removeCookie] = useCookies(['login','username']);
setCookie('login',true);//<--画面のレンダリングが発生
setCookie('username',"ユーザー名");//<--画面のレンダリングが発生
setCookie('Password',"abcdefg");//<--発生しない。
仮に再レンダリングが完全に不要の場合は['']を設定すれば大丈夫でしょう。
const [cookies, setCookie, removeCookie] = useCookies(['']);
setCookie('login',true);//<--発生しない。
setCookie('username',"ユーザー名");//<--発生しない。
setCookie('Password',"abcdefg");//<--発生しない。
setCookieで値を追加できます。
setCookie("引数1番目", '引数2番目','引数3番目')
cookieの名前(KEY)の部分です。値はなんでも良いです。
2番目は値です。trueと入れていますが"string"でも大丈夫。
3番目はoptionになります。
不要であれば引数3番目は入れなくても大丈夫です。
とりあえず使うのは有効期限の設定かと思います。
有効期限を指定しない場合はクッキーの有効期限はセッションとなり、ブラウザを閉じるまで維持されます。
クッキーの有効期限の設定方法は2種類あります。
const cookieDate = new Date('2022-12-15 23:59:59')
const [cookies, setCookie, removeCookie] = useCookies(['login']);//--init
setCookie("login",'ログインしています。', { expires: cookieDate });//<-- 2022-12-15日迄有効
または
const [cookies, setCookie, removeCookie] = useCookies(['login']);
setCookie("login",'ログインしています。', { maxAge : 2592000 }); // <--30日有効
CookiesProviderの追加
import reportWebVitals from './reportWebVitals';
import { CookiesProvider } from 'react-cookie'; //<--これ
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<React.StrictMode>
<CookiesProvider> {/*<--これ*/}
<App />
</CookiesProvider> {/*<--これ*/}
</React.StrictMode>
);
クッキーの追加、削除ボタンの作成。
import { useCookies } from "react-cookie";
const [cookies, setCookie, removeCookie] = useCookies(['login']);//--init
const Cookietest = (()=>{
setCookie("login",'ログインしています。');
})
const Cookieremove = (()=>{
removeCookie("login");
})
return(
<>
<p>cookieTest</p>
<button onClick={Cookietest}>クッキー追加</button>
<button onClick={Cookieremove}>削除</button>
<p>{cookies.login && cookies.login}</p>
</>
)
表示が変わっているのはクッキーが変わった後に再レンダーされているためです。
再レンダーをさせたくない場合は以下のように設定する。
画面が変わっていないため分かりにくいと思うがクッキーの追加削除はできています。
const [cookies, setCookie, removeCookie] = useCookies(['']);
クッキーの中身を確認する方法はいくつかあるが、私の場合chrome devのアプリケーションタブで確認します。
ここで手動でクッキーを追加することもできます。
実際の運用方法ではfetchのサーバー問い合わせしログイン実行という使い方だとおもうが、正直このような使い方をするのであれば、ReactQueryを使う方が楽に実装ができる。詳しくはReactQueryを触ってみるを参考ください。
以下のコードはnextjsを利用している。とても簡易的なものなので参考までに.
機能としてはログインしてない状態であればアラートを出し、http POSTでログインが成功した場合クッキーのloginにtureの値を入れています。
HTTP GET POSTのテストはmockableやpostmanを使えば簡単にテストができます。
const [cookies, setCookie] = useCookies(['login']);
if(cookies.login){return (
<LoginPage/>
)}
const cookieDate = new Date('2022-12-15 23:59:59')
const onSubmit = (async (data) => {
try {
let result = await fetch('/api/POST/', {
method: "POST",
headers: { "Content-Type": "Application/json" },
body: JSON.stringify(data)
});
if(result.status == 200){
setCookie("login", true, { expires: cookieDate });
}
else{
alert("エラーが発生しました管理者にお問い合わせください")
}
}
catch {
console.log("error")
}
});
公式サイト
ブラウザーにはクッキーとローカルストレージと言うものがあるので一時的にデータを保存することが可能になっている。
結論だけ言うとどちらも安全とは言えない。cookieによる被害は滅多にないと思うが確実に安全だとは言い難いので漏れたらダメな情報は保存しない方が良い。
せめて暗号化した情報のみを保存するようにする必要がある。
react-cookieを使えば簡単にクッキーを維持することができます。
初回訪問時、ログイン時等で状態を確認できるので後はお好みで表示させたり、非表示にしたりが可能です。
一般的なECサイトのかご機能はクッキーではなくローカルストレージを使う場合が多い。
質問や、間違いがありましたら、お気軽にどうぞ
※お名前とコメントの内容を入力してください。
※全てこのブログ上に公表されます。
※許可なく管理者によって修正・削除する場合がございます。 詳しくはプライバシーポリシーを参照ください