Laravelでメールアドレスを暗号化・復号化

Laravelでメールアドレスを暗号化・復号化して使用する時のメモ。

やりたいこと

  • 保存する時にメールアドレスを暗号化
  • 取り出す時にメールアドレスを復号化

暗号化・復号化自体はこちらの記事を参考にLaravelの機能を使って簡単にできた。 【Laravel 5.4】モデルのフィールドの暗号化・復号化

課題

参考記事内でも言及されているが暗号化した際の値が毎回変わるのでバリデーション時に一致せず、同じメールアドレスで複数のアカウントを登録できる状態になってしまった。参考記事では自作クラスを作成して解決されたようだが、私の場合は引き継ぎを前提とした開発だったので、なるべく認証周りに大きな変更を加えたり自前で何かを作ることはせずにlaravelの標準的な機能で完結させたかった。

対応

メールアドレスをsha256でハッシュ化した値を格納するカラムを別で作成して、それを登録時やログイン時のチェックに使用することにした。

/app/Http/Controllers/Auth/RegisterController.php

    protected function validator(array $data)
    {
        $data['encrypted_email'] = hash('sha256', $data['email']);
        return Validator::make($data, [
            'name' => 'required|string|max:255',
            'email' => 'required|string|email|max:255|unique:users',
            'password' => 'required|string|min:6|confirmed',
            'encrypted_email' => 'required|string|unique:users',
        ]);
    }

登録時はencrypted_emailのバリデーションを追加している。

/app/Http/Controllers/Auth/LoginController.php

use Illuminate\Http\Request;

class LoginController extends Controller
{
    (省略)

    protected function credentials(Request $request)
    {
        return ['encrypted_email' => hash('sha256', $request->email), 'password' => $request->password];
    }
}

ログイン時は認証キーをencrypted_emailに変更している。あとはメールアドレスを更新した際にencrypted_emailのカラムも同時に更新するなど細かい修正を加えている。

参考

フリーランスエンジニアが2018年に買ってよかったもの

フリーランスエンジニアが2018年に買ってよかった物のまとめです。

サンラメラ ヒーター

長時間座っているためかここ数年冬場になると足の神経痛に悩まされていたのですが、サンラメラを導入してからあまりそれを意識しなくなりました。静音(無音に近い)で乾燥せず部屋の底冷え感も解消されたので個人的に大満足の商品でした。自宅作業で部屋の底冷えに悩んでいる人がいたらおすすめできます。温かさはじんわり系で日光やサウナに近い感覚です。

人感センサー電球

玄関に付けています。家を出る時や帰ってきた時に自動で点灯して少し経つと勝手に消灯します。ちょっとしたことですが、これがあるとないとでは生活の質がだいぶ変わります。パナソニックアイリスオーヤマの電球を両方購入しましたが、パナソニックのほうが細かい動きに反応する気がします。

ティファール フライパン

よくあるコメントになってしまいますが、くっつかず洗いやすく手入れが楽です。

ブッククリップ

コーディングで本を開きっぱなしにしたい時に使っています。これまで適当なものをストッパー代わりに本の上に置いていたのですが、重さが足りなかったりバランスがずれたりで本が閉じて作業が中断してしまうことがありました。ブッククリップを検討してからいくつか比較して、使い勝手の良さそうなこちらの商品を選びました。

プラムネット ブッククリップ

プラムネット ブッククリップ

アーロンチェア

これまでの椅子では2~3時間座っていると腰に痛みがきていたのですが、アーロンチェアに変えてから座れる時間が伸びて痛みの強さも減りました。高額の買い物なので購入に決心は必要でしたが買ってよかった品です。保証期間が12年ありサポートが手厚いことも購入を決めたポイントです。大塚家具でセールのタイミングと重なり15万円台で購入できました。

ブロックチェーンアプリケーション開発の教科書

自分の開発でブロックチェーンを使う機会はなかったのですが、ブロックチェーンの仕組みや周辺環境を学ぶことは海外旅行の異文化体験のように学びが大きいものでした。直近の案件ではスマートコントラクトの概念を参考にするなど多少なり勉強したことを活かせています。

ブロックチェーンアプリケーション開発の教科書

ブロックチェーンアプリケーション開発の教科書

まとめ

2018年の買ってよかったものを振り返ると長年抱えていた健康の問題を多く解消できた気がしています。一方で、価格の割に使用回数が少なかったなど反省点のある買い物も結構な額でありました(主に機材周り)。作業へのノイズや負荷を下げるための買い物が成功しやすい傾向にあるので、来年はそのあたりを意識しながら調整してみたいと思います。

さくらVPSでSSL導入

さくらVPSSSL導入を導入した時のメモ

前提

  • さくらVPSでLaravelの環境を構築済。

tsyknsr.hatenablog.com

作業内容

こちらの続き。

  1. /var/www/html以下にプロジェクト用のディレクトリを作成。既存のLaravelのソースコードを移動する。
  2. バーチャルホストを設定。Apache2.4から書き方が変わったらしくエラーを解消しながら作業。
  3. IPアドレスでアクセスして表示を確認。
  4. GoogleDomains側でネームサーバー設定
  5. さくらVPS側でネームサーバー設定。記事に沿って作業。今回は「簡単設定」を選択。
  6. Let’s Encrypt SSL証明書
  7. バーチャルホストにSSL設定を追加

参考

さくらVPSを借りてやったこと

さくらVPSを借りてやったことのメモ

作業内容

  1. CentOS7に変更
  2. 作業ユーザーを作成
  3. 公開鍵認証設定
  4. rootアカウントのログインを許可しない
  5. パスワード認証を許可しない
  6. Port番号を変更
  7. yum update
  8. Laravel環境の構築

完了するとLaravelのトップページを確認できる。

f:id:tsyknsr:20181126100153p:plain

課題

  • ローカルで開発しているLaravelプロジェクトのデプロイ
  • SSL導入

追記:対応済

tsyknsr.hatenablog.com

参考

Google Domainsで取得したドメインをさくらのレンタルサーバーで使用する

Google Domainsで取得したドメインをさくらのレンタルサーバーで使用する時のメモ

前提

さくら側の設定

記事に沿って作業を進める。 レンタルサーバー取得直後に行うと「初期ドメインDNSに登録されていません。しばらく後に設定して下さい」の表記になる。 (時間を置いて再度設定を行うと問題なく進めた。)

参考:【ドメイン設定】他社で取得・管理中のドメインを利用 – さくらのサポート情報

Google Domains側の設定

カスタムサーバに切り替え。

さくらインターネット指定ネームサーバ

  • ネームサーバー1:ns1.dns.ne.jp
  • ネームサーバー2:ns2.dns.ne.jp

参考:ドメイン ネームサーバーの管理 - Google Domains ヘルプ

SSL対応

SSLを導入する。記事に沿って管理画面から行う。

参考:【無料SSL】サーバコントロールパネルからの導入手順 – さくらのサポート情報

まとめ

レンタルサーバーは環境構築が楽、SSLの導入も簡単。Google Domains使いやすい。

Elastic Beanstalk + Laravelで環境構築

Elastic Beanstalk + Laravelで環境構築した時のメモ

環境構築

Elastic Beanstalk + Laravelの組み合わせでデプロイの標準的な方法が中々見つからず苦戦し、最終的にAWSのドキュメントに沿って進めることにしました。 しかし、このドキュメントだけでは500エラーの表示となってしまい色々と調べていたところ、こちらの記事を呼んで環境変数の設定が抜けていることが分かりました。

記事に沿って環境変数を設定し、無事にデフォルトのページを表示できました。 文章で書くと短いですが、普段使っているRailsに比べて情報の数自体が少なくてなんだかんだで半日近く使いました。

参考リンク

CentOS7で名前解決できないエラー対応

vagrant upで以下のエラーが出た時の対応メモ。

The following SSH command responded with a non-zero exit status.
Vagrant assumes that this means the command failed!

yum install -y kernel-devel kernel-devel-`uname -r` gcc binutils make perl bzip2

Stdout from the command:

Loaded plugins: fastestmirror
Determining fastest mirrors
Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=vag error was
14: curl#6 - "Could not resolve host: mirrorlist.centos.org; Unknown error"


Stderr from the command:



 One of the configured repositories failed (Unknown),
 and yum doesn't have enough cached data to continue. At this point the only
 safe thing yum can do is fail. There are a few ways to work "fix" this:

     1. Contact the upstream for the repository and get them to fix the problem.

     2. Reconfigure the baseurl/etc. for the repository, to point to a working
        upstream. This is most often useful if you are using a newer
        distribution release than is supported by the repository (and the
        packages for the previous distribution release still work).

     3. Run the command with the repository temporarily disabled
            yum --disablerepo=<repoid> ...

     4. Disable the repository permanently, so yum won't use it by default. Yum
        will then just ignore the repository until you permanently enable it
        again or use --enablerepo for temporary usage:

            yum-config-manager --disable <repoid>
        or
            subscription-manager repos --disable=<repoid>

     5. Configure the failing repository to be skipped, if it is unavailable.
        Note that yum will try to contact the repo. when it runs most commands,
        so will have to try and fail each time (and thus. yum will be be much
        slower). If it is a very temporary problem though, this is often a nice
        compromise:

            yum-config-manager --save --setopt=<repoid>.skip_if_unavailable=true

Cannot find a valid baseurl for repo: base/7/x86_64
$ vagrant ssh
# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
# ping google.com
ping: google.com: Name or service not known
# vi /etc/sysconfig/network-scripts/ifcfg-{xxx}
DNS1=8.8.8.8
DNS2=8.8.4.4
# systemctl restart network
# ping google.com
PING google.com (172.217.25.206) 56(84) bytes of data.

参考

CentOS6 or CentOS7(VirtualBox)で名前解決ができなくなった場合の対処方法 - web-technical-blog