首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel 5.0多身份验证

Laravel 5.0多身份验证
EN

Stack Overflow用户
提问于 2017-08-14 17:46:02
回答 5查看 196关注 0票数 6

我有一个应用程序,它有两个部分-后端和前端。在后台管理员可以登录,在前端客户端可以登录。现在它已经实现了。所有应用程序的查询都是通过管理员和客户端的登录用户id来完成的。

现在我的应用程序需要一个功能,管理员可以查看客户数据一样,客户看到他们的profile.There是在客户端的很多东西。我可以使用Auth::loginUsingId($client_id)。此处,客户端配置文件显示完美,但管理员登录会话如预期的那样丢失。

如何实现这一点,而管理员登录仍然和管理员可以看到客户端的完整数据?

EN

回答 5

Stack Overflow用户

发布于 2017-08-21 03:21:23

让我介绍一下拥有login as client功能的最简单的方法。首先,定义asuserreturnback路由。

路由和操作

代码语言:javascript
复制
Route::get('/asuser/{user}', 'AdminController@asuser')
        ->where('user', '[0-9]+')
        ->name('asuser');
Route::get('/returnback', 'ClientController@returnback')
        ->name('returnback');

在管理员的控制器中:

代码语言:javascript
复制
public function asuser(User $client, Request $request) {
    /* insert checking if user has right either here with some field 
     * like $user->is_admin or using middleware settings and Policy
     */
    # who user is
    $fromId = Auth::user()->getId();

    # logging as a client
    Auth::login($client, true);

    # but keeping admin in a session
    $request->session()->put('adm_id', $fromId);

    return redirect()->route('some-client-route')
                    ->with('status', 'You are logged in as a client');
}

并返回ClientController

代码语言:javascript
复制
public function returnback(Request $request) {
    $fromId = Auth::user()->getId();

    # getting admin id
    $admId = $request->session()->pull('adm_id');
    $adminUser = User::find($admId);

    if (!$adminUser) {
        return redirect()->back()
                        ->with('status', 'Not allowed');
    }

    # logging out as a client and logging in as admin
    Auth::logout();
    Auth::login($adminUser, true);

    return redirect()->route('some-admin-route')
                    ->with('status', 'Welcome back!');
}

是否已准备好投入生产

不,不是的。这不是一个很好的解决方案,它只是一个如何使用它的一瞥。会话具有生存期,因此如果admin在其生存期内没有返回,session variables are lost和他将成为客户端(如果remember me=true,如上面的代码所示)。您可以将值存储在数据库列中,而不是存储在会话中。

此外,正如t1gor提到的,您必须注意这样一个事实,即当管理员是客户端时,您不能记录客户端的操作和发送事件。这是作为客户端进行日志记录最严重的问题。不管怎样,我想,解决这个问题要比把所有的身份验证逻辑移出视图容易得多。

好吧,希望这能对你有所帮助。

票数 3
EN

Stack Overflow用户

发布于 2017-08-20 21:08:11

我认为管理客户端/用户配置文件的一个好方法是在你的后端实现一个用户管理部分,在那里显示和编辑你的用户及其配置文件。

票数 2
EN

Stack Overflow用户

发布于 2017-08-18 18:37:52

Laravel不提供混合会话。您一次只能作为一个用户进行身份验证。如果你真的需要Laravel 5.0中的这类功能,你可以通过hackish user ping-pong来解决这个问题(例如,临时作为客户端登录,然后立即切换回管理员)。

但是你的问题似乎更多的是Authorization-related (相对于Authentication)。Laravel在v5.1.11中实现了一个授权层。由于v5.0不再受支持,因此无论此功能如何,您都应该进行更新。

您可以在官方文档中找到有关授权的更多信息:https://laravel.com/docs/5.1/authorization

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45671751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档