鍍金池/ 問答/PHP/ laravel5.4表單驗(yàn)證的問題,謝謝大家!

laravel5.4表單驗(yàn)證的問題,謝謝大家!

我自定義了個(gè)功能,就是防止IP重復(fù)注冊,但是在表單驗(yàn)證的時(shí)候提交頁面沒有效果,請(qǐng)問哪里錯(cuò)了?

protected function validator(array $data)
    {
        $ip = DB::table('users')->whereRaw('ip = ? and created_at > ?', [get_client_ip(), Carbon::now()->subMinutes(60)])->count();
        $data = array_add($data,'ip',(string)$ip);
        return Validator ::make($data, [
            'name'     => 'required|string|max:255',
            'email'    => 'required|string|email|max:255|unique:users',
            'password' => 'required|string|min:6|confirmed',
            'captcha'  => 'required|captcha',
            'ip'       => 'required|same:0',
        ], [
            'captcha.required' => '請(qǐng)輸入驗(yàn)證碼!',
            'captcha.captcha'  => '驗(yàn)證碼錯(cuò)誤',
            "ip.same"      => "同一IP在60分鐘內(nèi)無法再次注冊",
        ]);
    }

追加的IP字段假如不等于0的話就提示錯(cuò)誤,等于0的時(shí)候就默認(rèn)通過驗(yàn)證.

回答
編輯回答
心悲涼

你建一張表, 注冊成功之后存入ip。 下次注冊的時(shí)候檢測一下60分鐘內(nèi)是否已經(jīng)注冊, 如果沒有就可以注冊。

2018年1月1日 04:37
編輯回答
茍活

我覺得這里可以用unique規(guī)則,個(gè)人習(xí)慣用自定義驗(yàn)證類:

use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;

class SignUpRequest extends FormRequest {

    public function authorize() {
        return true;
    }

    public function rules() {

        return [
            'name'     => 'required|string|max:255',
            'email'    => 'required|string|email|max:255|unique:users',
            'password' => 'required|string|min:6|confirmed',
            'captcha'  => 'required|captcha',
            'ip' => [
                'required',
                Rule::unique('users')->where(function ($query) {
                    $query->where([
                        ['ip', get_client_ip()],
                        ['created_at', '>', now()->subMinutes(60)]
                    ]);
                )}
            ]
        ];
    }

    public function messages() {
        return [
            'captcha.required' => '請(qǐng)輸入驗(yàn)證碼!',
            'captcha.captcha'  => '驗(yàn)證碼錯(cuò)誤',
            "ip.unique"      => "同一IP在60分鐘內(nèi)無法再次注冊",
        ];
    }
}

可以試試

2017年10月3日 04:20