LoginSignup
31
28

More than 5 years have passed since last update.

SimpleAuthの使いかた

Posted at

七音と五音ですね。
以前SimpleAuthでサブドメインをまたぐなんて記事を書いておいて何を今更という感じですが
そもそも導入部を書いてなかったので書いておきます。

SimpleAuthはFuelPHPインストール時に既に入っているパッケージなので、設定すれば動きます。

設定

  • fuel/package/auth/config より auth.php simpleauth.phpをコピー
  • fuel/app/config に貼り付け
auth.php
return array(
    'driver' => 'Simpleauth',
    'verify_multiple_logins' => false,
    'salt' => 'YOUR_SALT_STRING',
    'iterations' => 10000,
);
simpleauth.php

    'table_name' => 'users',

    'login_hash_salt' => 'kmwmtrhtr',

    'username_post_key' => 'username',

    'password_post_key' => 'password',

上記項目を環境に合わせて調整してください。
このケースではusersテーブルにユーザー情報を持ち、usernameカラムとpasswordカラムを用いてログインを行う設定になっています。

groupの使い方はまた別に。

usersテーブルについてですが、これについてはDBを作成する必要があります。
なにか便利な方法があったのかもしれませんが、私は全て手打ちでやってしまいました(´@ω@`)
公式リファレンスによれば

少なくとも、 'username', 'password', 'email', 'last_login', 'login_hash', 'group', 'profile_fields' を含んでいる必要があります。

とのことでした。
username_post_keyの値はあくまで$_POSTのキーの名前なので、DBに直接の関係は無いみたいです。

ビュー側

login.php
        <?php echo Form::open(array('action'=>'login'),array(\Config::get('security.csrf_token_key') => \Security::fetch_token())) ?>
            <?php echo Form::input('username','') ?>
            <?php echo Form::input('password','') ?>
            <?php echo Form::input('send', 'ログイン', array('type'=>'submit')) ?>
            <p><?php echo Html::anchor('http://antn.info/forget','パスワードを忘れた方はこちら') ?>
        <?php echo Form::close() ?>

ここでinputの第一引数(name値)に指定されているのが上記でusername_post_keyなどに設定した文字列になっています。しかし関係有るのかこれ?
で、これを受け取るコントローラーが以下。

コントローラー側

hoge.php
    public function before(){
        parent::before();

        $post_methods = array(
            'login'
        );

        // root/Controller/Methodを指す
        $method = Uri::segment(2);

        // ログインチェック
        $auth_methods = array(
            'setting'
        );
        /*
         * 認証が必要なメソッド且つログインしていない場合
         * ログイン画面へ遷移
         */
        if((empty($method) || in_array($method ,$auth_methods)) && !Auth::check()){
            Response::redirect('login');
        }

        // CSRFチェック
        if(Input::method() === 'POST'){
            if(!Security::check_token()){
                Response::redirect('error');
            }
        }
    }

上記ソースでは、「settingを開いた時にログインいていなければloginメソッドへ遷移」位のことが書かれています。もちろん、loginを開いた時は問題なくログイン画面が表示されます。
ここを誤って$auth_methods=array('setting','login')なんて書いてしまうと、リダイレクトループにハマる羽目になりますのでご注意を。

before()メソッドは、コントローラーの各メソッドにアクセスする前にかならず通過する場所です。
ここに認証を書いておくことで、例えばSimpleAuthを利用しない場合であっても簡単な認証を組むことが出来ます。

hoge.php(続き)
    public function action_login()
    {
        $post = Input::post();
        if(!empty($post)){
            // ログイン処理
            $username = $post['username'];
            $password = $post['password'];
            $result_validate = '';
            if ($username !== null && $password !== null) {
                // ログイン認証を行う
                $auth = Auth::instance();
                if ($auth->login($username, $password)) {
                    // ログイン成功
                    Response::redirect('index');
                }
                $result_validate = "ログインに失敗しました。";
            }
        }
        $this->template->title="ログイン";
        $this->template->content = View::forge('hoge/login',$data);
    }

一先ずこれで簡単なログイン動作が完成ですヽ(´@ω@`)ノ
長い記事は読む気がしないので、細かい設定や応用編はまた後に。

31
28
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
31
28