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

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

我自定義了個(gè)功能,就是防止IP重復(fù)注冊(cè),但是在表單驗(yàn)證的時(shí)候提交頁(yè)面沒(méi)有效果,請(qǐng)問(wèn)哪里錯(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)無(wú)法再次注冊(cè)",
        ]);
    }

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

回答
編輯回答
心悲涼

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

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

我覺(jué)得這里可以用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)無(wú)法再次注冊(cè)",
        ];
    }
}

可以試試

2017年10月3日 04:20