4

我有不同的用户,其中一些是普通用户,还有一些是管理员。我需要的是管理员可以通过单击用户列表中的按钮以任何其他用户身份登录。

到目前为止,我所拥有的是:

index.blade.php(用户列表):

<a href='{{URL::route('users.loginas', array('id' => $user->id))}}'>LoginAs</a>

路线.php:

Route::group(array('before'=>'auth'), function()
{
    Route::get('/', array('as'=>'index', 'uses'=>'HomeController@showWelcome'));

    Route::resource('users', 'UsersController');
    Route::any('users/loginas/{id}', array('as'=>'users.loginas', 'uses' => 'UsersController@loginAs'));

});

用户控制器.php:

class UsersController extends BaseController {

...

public function loginAs($id)
    {
        Auth::logout();
        Auth::loginUsingId($id);

        return Redirect::route('provalogin');
    }

}

当我在使用 ID 为 1 的用户登录时从用户列表中单击 ID 为 2 的用户的链接时,我被正确地重定向到 mysite.com/users/loginas/2 但随后它抛出了一个错误异常:

传递给 Illuminate\Auth\Guard::login() 的参数 1 必须实现接口 Illuminate\Auth\UserInterface,给定 null,在 /var/www/mysite.com/web/vendor/laravel/framework/src/Illuminate/Auth 中调用/Guard.php 在第 368 行并定义

然后,如果我将 URL 更改为 mysite.com/users,我可以看到我实际上是以新用户身份登录的,所以Auth::loginUsingId(2)有效。

我究竟做错了什么?或者我应该怎么做?

4

4 回答 4

0

我发现我的用户是空的,我通过加载正确的用户来解决,我不知道它是否也适合你,但你可以试试。

于 2014-09-17T05:20:24.730 回答
0

对我来说,它与\Session::flush();. 会话中似乎还记得一些变量。

于 2014-04-10T14:01:40.270 回答
0

听起来您的用户模型设置不正确,继承了 UserInterface。

您的用户模型应如下所示:

class User extends Eloquent implements UserInterface

您的 auth.php 配置应如下所示:

return array(

    /*
    |--------------------------------------------------------------------------
    | Default Authentication Driver
    |--------------------------------------------------------------------------
    |
    | This option controls the authentication driver that will be utilized.
    | This drivers manages the retrieval and authentication of the users
    | attempting to get access to protected areas of your application.
    |
    | Supported: "database", "eloquent"
    |
    */

    'driver' => 'eloquent',

    /*
    |--------------------------------------------------------------------------
    | Authentication Model
    |--------------------------------------------------------------------------
    |
    | When using the "Eloquent" authentication driver, we need to know which
    | Eloquent model should be used to retrieve your users. Of course, it
    | is often just the "User" model but you may use whatever you like.
    |
    */

    'model' => 'User',

    /*
    |--------------------------------------------------------------------------
    | Authentication Table
    |--------------------------------------------------------------------------
    |
    | When using the "Database" authentication driver, we need to know which
    | table should be used to retrieve your users. We have chosen a basic
    | default value but you may easily change it to any table you like.
    |
    */

    'table' => '',

    /*
    |--------------------------------------------------------------------------
    | Password Reminder Settings
    |--------------------------------------------------------------------------
    |
    | Here you may set the settings for password reminders, including a view
    | that should be used as your password reminder e-mail. You will also
    | be able to set the name of the table that holds the reset tokens.
    |
    */

    'reminder' => array(
        'email' => 'emails.forgot-pass', 'table' => 'forgot_pass'
    ),

)
于 2013-07-09T18:24:22.300 回答
0

我所做的是使用 Session 将 userID 设置为等于 auth 用户 id。然后,如果我想切换用户,我只需更改会话用户 ID,但将身份验证用户 ID 保留为我自己。在我的应用程序中,我总是在查询数据时传递会话用户 ID。如果我更新、创建或软删除记录,我会传递我的身份验证用户 ID。这样我就可以记录谁实际更改了数据。我永远不必注销来切换用户,只需设置会话用户 ID。

于 2013-05-29T12:01:18.560 回答