「グーグルでログインする」ボタンをカスタマイズする方法
先日、「グーグルアカウントを利用してウェブサイトにログインする機能」の実装方法を紹介しました
ところが公式ドキュメント通りに実装すると、一つの問題に直面します
それは、
・・・
・・
・
「ボタンのデザインがダサいWebサイトに合わないこと」
です
この解決(ボタンのカスタマイズ)方法を紹介します
カスタマイズの公式ドキュメントも存在するんですが、相変わらずわかりずらいです
Before → After
グーグルサインインAPIで表示される、デフォルトのログインボタン。それが、
はい、こちらです
悪くはないんですが、横幅のサイズがレスポンシブに対応できないとか、ウェブサイトのベースデザインに合わないなどの問題があります
それを今回、こういう感じで表示できるようにカスタマイズします
ボタンデザインのカスタマイズ
Login.html
ビフォアー
<head>
<meta name="google-signin-client_id" content="準備編で取得したクライアントID">
</head>
<!-- ボタンを表示 -->
<div class="g-signin2" data-onsuccess="onSignIn"></div>
<!-- ライブラリのロード -->
<script src="https://apis.google.com/js/platform.js" async defer></script>
<script>
function onSignIn(googleUser) {
// トークンの取得(サーバーにはこちらを送信)
var id_token = googleUser.getAuthResponse().id_token;
// 接続を解除して、2回目以降の自動ログインを防止
var auth2 = gapi.auth2.getAuthInstance();
auth2.disconnect();
// 5.サーバへ送信
var xhr = new XMLHttpRequest();
// open()で指定するのは、サーバ側のURL
xhr.open('POST', 'https://example.com/server-side.php');
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
// 処理が終わった後に呼ばれるコールバック
xhr.onload = function() {
if(xhr.readyState == 4 && xhr.status == 200 && response){
// ログイン完了後にリダイレクト
window.location.href = 'https://example.com';
}
else{
console.log('エラー');
}
};
xhr.send('idtoken=' + id_token);
}
</script>
アフター
<head>
<meta name="google-signin-client_id" content="準備編で取得したクライアントID">
</head>
<!-- ボタンを表示 -->
<button id="googleSignIn" class="btn btn-block">
<svg aria-hidden="true" class="native svg-icon iconGoogle" width="18" height="18" viewBox="0 0 18 18"><path d="M16.51 8H8.98v3h4.3c-.18 1-.74 1.48-1.6 2.04v2.01h2.6a7.8 7.8 0 002.38-5.88c0-.57-.05-.66-.15-1.18z" fill="#4285F4"></path><path d="M8.98 17c2.16 0 3.97-.72 5.3-1.94l-2.6-2a4.8 4.8 0 01-7.18-2.54H1.83v2.07A8 8 0 008.98 17z" fill="#34A853"></path><path d="M4.5 10.52a4.8 4.8 0 010-3.04V5.41H1.83a8 8 0 000 7.18l2.67-2.07z" fill="#FBBC05"></path><path d="M8.98 4.18c1.17 0 2.23.4 3.06 1.2l2.3-2.3A8 8 0 001.83 5.4L4.5 7.49a4.77 4.77 0 014.48-3.3z" fill="#EA4335"></path></svg>
Log in with Google
</button>
<!-- ライブラリのロード -->
<script src="https://apis.google.com/js/platform.js?onload=googleCallBack" async defer></script>
<script>
function googleCallBack(){
gapi.load('auth2', function() {
auth2 = gapi.auth2.init({
client_id: '準備編で取得したクライアントID',
cookiepolicy: 'single_host_origin',
scope: 'profile'
});
auth2.attachClickHandler(element, {},
function(googleUser) {
console.log('Signed in: ' + googleUser.getBasicProfile().getName());
// トークンの取得(サーバーにはこちらを送信)
var id_token = googleUser.getAuthResponse().id_token;
// 接続を解除して、2回目以降の自動ログインを防止
var auth2 = gapi.auth2.getAuthInstance();
auth2.disconnect();
// 5.サーバへ送信
var xhr = new XMLHttpRequest();
// open()で指定するのは、サーバ側のURL
xhr.open('POST', 'https://example.com/server-side.php');
xhr.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded');
// 処理が終わった後に呼ばれるコールバック
xhr.onload = function() {
if(xhr.readyState == 4 && xhr.status == 200 && response){
// ログイン完了後にリダイレクト
window.location.href = 'https://example.com';
}
else{
console.log('エラー');
}
};
xhr.send('idtoken=' + id_token);
}, function(error) {
console.log('Sign-in error', error);
}
);
});
element = document.getElementById('googleSignIn');
}
</script>
6行目
<button id="googleSignIn" class="btn btn-block">
コードではbuttonを使ってますが、別に画像でも大丈夫です
このボタンにはBootstrapのクラス「"btn btn-block"」を指定してますが、ここは自分の環境に合うようなCSSを指定してください
7行目
<svg aria-hidden="true" class="native svg-icon iconGoogle" width="18" height="18" viewBox="0 0 18 18"><path d="M16.51 8H8.98v3h4.3c-.18 1-.74 1.48-1.6 2.04v2.01h2.6a7.8 7.8 0 002.38-5.88c0-.57-.05-.66-.15-1.18z" fill="#4285F4"></path><path d="M8.98 17c2.16 0 3.97-.72 5.3-1.94l-2.6-2a4.8 4.8 0 01-7.18-2.54H1.83v2.07A8 8 0 008.98 17z" fill="#34A853"></path><path d="M4.5 10.52a4.8 4.8 0 010-3.04V5.41H1.83a8 8 0 000 7.18l2.67-2.07z" fill="#FBBC05"></path><path d="M8.98 4.18c1.17 0 2.23.4 3.06 1.2l2.3-2.3A8 8 0 001.83 5.4L4.5 7.49a4.77 4.77 0 014.48-3.3z" fill="#EA4335"></path></svg>
グーグルのカラフルなGマークに当たる部分です
グーグルログインボタンをカスタマイズする際、グーグルのAPIであることを示すためにこのGマークを変更してはいけません
どのようなボタンにカスタマイズする場合であっても、必ずこのマークを表示することが必要だとガイドラインにも明記されています
表示のやり方は様々ですが、僕は一応SVGで指定しています
11行目
<script src="https://apis.google.com/js/platform.js?onload=googleCallBack" async defer></script>
ビフォアーではただAPIをロードするだけでしたが、
カスタマイズするときは、オンロードで読み込むレンダー関数(googleCallBack)を指定します
ディスカッション
コメント一覧
まだ、コメントがありません
新たにPostされたDocs
: ツール関連
キーボードを銀軸から赤軸に買い替えた話
約3年半前、仕事で使うキーボードとしてARCHISS ProgresTouchの ...: スマホ
楽天モバイルがおすすめできない人の特徴とは?
楽天モバイルの最強プランをおすすめできない人の特徴を簡単にまとめてみました また ...: システム開発
なぜスクラムがつらいのか?開発現場が疲弊するのか?スクラムに対する違和感と共に原因を考えてみた
今ではどこの開発現場に行っても、やれスクラムスクラムと、まるでスクラムでもやって ...: Laravel
1つのテーブルを複数のテーブルと結合したい【Laravel10】
1つのテーブルを2つの異なるテーブルに対して結合したいケースがあったのでLara ...: Laravel
Laravelで複数画像アップロード時のvalidateを指定【Laravel10】
jQuery - Image Uploaderを使って、フォームから複数の画像を ...HashMap
created_by
はやぴ
Web/アプリ開発エンジニア
Sierにてお堅いB向けのソフトウェア開発を経て、現在はC向けのWebやアプリを中心に開発しています。
Utilities