【问题标题】:Laravel 5 athentication in subdomain is not working子域中的 Laravel 5 身份验证不起作用
【发布时间】:2017-02-04 11:34:27
【问题描述】:

我在我的 laravel 5 项目中使用了一个子域,但是当我尝试登录用户时,它不会再进行身份验证。这是我的config\session.php

return [
'driver' => env('SESSION_DRIVER', 'database'),
'lifetime' => 120,
'expire_on_close' => false,
'encrypt' => true,
'files' => storage_path('framework/sessions'),
'connection' => null,
'table' => 'sessions',
'lottery' => [2, 100],
'cookie' => 'laravel_session',
'path' => '/',
'domain' => '.stagedevelopment.dev',
'secure' => false,
'http_only' => true,
];

我的routes.php

Route::group([ 'prefix' => 'app', 'middleware' => 'auth' ], function() {
       ... some codes ....
    Route::group(['domain' => '{account_alias}.'.stagedevelopment.dev'], function () {
                    Route::get('dashboard', 'DashController@index');

这是DashController.php上的“DashController@index

public function index(Request $request, $account_alias = null){
   if ( Auth::user()){
    // CODES TO CALL THE VIEW
   }
}

但在登录时,它不会重定向。这让我有问题。我还通过var_dump(Auth::user()) 进行检查,但它返回null 值,但我尝试了var_dump($request->session()->get('uid')),它返回尝试进行身份验证的用户的user_id

我的问题是,我错过了什么吗?我只希望用户通过身份验证在Auth::user() 中。请帮我解决一下这个。任何帮助将不胜感激。提前谢谢你。

顺便说一下,这是我登录用户的代码

public function postSignIn( Request $request) {
        $rules = array(
            'email' => 'required|email',
            'password' => 'required',
        );
        $validator = Validator::make( Input::all(), $rules );
        if ( $validator->passes() ){
            $remember = ( !is_null( $request->get('remember')) ? true : false );
            if ( Auth::attempt( array( 'email' => $request->input('email'), 'password' => $request->input('password') ) ) ){
                if ( Auth::check() ){
                        $account = \App\Account::where( 'alias', 'LIKE', Auth::user()->account->alias )->get();
                        if($account->count() > 0){
                            return Redirect::to('http://'. Auth::user()->account->alias.'.stagedevelopment.dev/app/dashboard');
                        }
                }
            }
        }
    }

【问题讨论】:

  • 我会先检查 cookie 域。看起来您正在使用 RFC 2109 语法,但现代浏览器会更喜欢 RFC 6265 并忽略前导点。所以试试'domain' => 'stagedevelopment.dev'
  • 主教您好,感谢您的回复。好吧,我在domain 中为子域添加了一个点。我从这个stackoverflow.com/questions/30338518/…得到了这个想法

标签: php laravel-5


【解决方案1】:

现在可以了。这只是我的代码上的路线问题。 routes.php 中的子域必须是第一个,它的内部将是前缀等,如下所示:

Route::group(['domain' => '{account_alias}.'.env('APP_URL_NAME')], function () {
    // L3
    Route::group([ 'prefix' => 'app', 'middleware' => 'auth', 'middleware' => 'auth.manager' ], function() {
        Route::get('dashboard', 'DashController@index');

【讨论】:

  • 我如何处理不同的 laravel 项目
猜你喜欢
  • 1970-01-01
  • 2020-09-28
  • 2015-07-28
  • 1970-01-01
  • 2021-12-20
  • 1970-01-01
  • 2016-10-21
  • 2015-07-19
相关资源
最近更新 更多