laravel auth如何实现的

WBOY
发布: 2016-06-06 20:27:45
原创
1239 人浏览过

<code class="php">//\app\Http\Controllers\Auth\AuthController.php
/**
     * Create a new authentication controller instance.
     *
     * @param \Illuminate\Contracts\Auth\Guard     $auth
     * @param \Illuminate\Contracts\Auth\Registrar $registrar
     */
    public function __construct(Guard $auth, Registrar $registrar,Request $request)
    {
        $this->auth = $auth;
        $this->registrar = $registrar;
        $this->request = $request;
        }
        
    public function postRegister()
    {
        $data = $this->request->all();
        //调用App\Services\Registrar里的validator
        $validator = $this->registrar->validator($data);

        if ($validator->fails()) {
            $this->throwValidationException(
                $this->request, $validator
            );
        }
        $this->auth->login($this->registrar->create($data));//这里的login哪里实现的?
        
        return redirect('/user');
    }
    //\app\Providers\AppServiceProvider.php
    public function register()
    {
    //绑定实现Illuminate\Contracts\Auth\Registrar接口的类App\Services\Registrar,但没绑定auth的
        $this->app->bind(
            'Illuminate\Contracts\Auth\Registrar',
            'App\Services\Registrar'
        );
    }    </code>
登录后复制
登录后复制

回复内容:

<code class="php">//\app\Http\Controllers\Auth\AuthController.php
/**
     * Create a new authentication controller instance.
     *
     * @param \Illuminate\Contracts\Auth\Guard     $auth
     * @param \Illuminate\Contracts\Auth\Registrar $registrar
     */
    public function __construct(Guard $auth, Registrar $registrar,Request $request)
    {
        $this->auth = $auth;
        $this->registrar = $registrar;
        $this->request = $request;
        }
        
    public function postRegister()
    {
        $data = $this->request->all();
        //调用App\Services\Registrar里的validator
        $validator = $this->registrar->validator($data);

        if ($validator->fails()) {
            $this->throwValidationException(
                $this->request, $validator
            );
        }
        $this->auth->login($this->registrar->create($data));//这里的login哪里实现的?
        
        return redirect('/user');
    }
    //\app\Providers\AppServiceProvider.php
    public function register()
    {
    //绑定实现Illuminate\Contracts\Auth\Registrar接口的类App\Services\Registrar,但没绑定auth的
        $this->app->bind(
            'Illuminate\Contracts\Auth\Registrar',
            'App\Services\Registrar'
        );
    }    </code>
登录后复制
登录后复制

Login哪里实现
IlluminateAuthGuard 第430行

<code class="php">public function login(UserContract $user, $remember = false)
    {
        $this->updateSession($user->getAuthIdentifier());

        // If the user should be permanently "remembered" by the application we will
        // queue a permanent cookie that contains the encrypted copy of the user
        // identifier. We will then decrypt this later to retrieve the users.
        if ($remember) {
            $this->createRememberTokenIfDoesntExist($user);

            $this->queueRecallerCookie($user);
        }

        // If we have an event dispatcher instance set we will fire an event so that
        // any listeners will hook into the authentication events and run actions
        // based on the login and logout events fired from the guard instances.
        $this->fireLoginEvent($user, $remember);

        $this->setUser($user);
    }</code>
登录后复制

还有啥问题么= =?

看源代码:https://github.com/laravel/framework/tree/5.1/src/Illuminate/Auth
自己扩展:http://my.oschina.net/zgldh/blog/379461#OSC_h2_1
参考第三方实现:https://cartalyst.com/manual/sentinel/2.0

相关标签:
php
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!