标签: laravel-fortify

使用电子邮件或用户名登录 Fortify Laravel 8

我试图允许用户使用电子邮件或用户名及其密码登录。

我在 FortifyServiceProvider.php 的 boot() 内添加了以下代码:

Fortify::authenticateUsing(function (Request $request) {
        $user = User::where('email', $request->email)
            ->orWhere('username', $request->username)
            ->first();

        if ($user &&
            Hash::check($request->password, $user->password)) {
            return $user;
        }
    });
Run Code Online (Sandbox Code Playgroud)

但现在,当用户尝试通过输入用户名而不是电子邮件登录时,他们会收到以下错误消息:

These credentials do not match our records.
Run Code Online (Sandbox Code Playgroud)

php laravel laravel-authentication laravel-8 laravel-fortify

7
推荐指数
1
解决办法
6436
查看次数

如何将 Spatie 的 laravel-permission 与 JetStream 正确集成?

我在 Laravel 8 中很好地安装了 Laravel JetStream 和 Spatie 的 laravel-permission。

\n

我可以在注册过程中为用户分配角色

\n
$user->assignRole('visitor');\nreturn $user;\n
Run Code Online (Sandbox Code Playgroud)\n

并可以通过我在播种器 fil\xc3\xa9s run 方法中分配给角色的权限来限制用户仪表板上的可用菜单项:

\n
Permission::create(['name' => 'access profile']);\nPermission::create(['name' => 'access logout']);\n\n$visitor = Role::create(['name' => 'visitor']);\n$visitor->givePermissionTo('access profile');\n
Run Code Online (Sandbox Code Playgroud)\n

并通过视图中的 can 指令,例如:

\n
@can('access profile')\n<!-- Account Management -->\n<div class="block px-4 py-2 text-xs text-gray-400">\n    {{ __('Manage Account') }}\n</div>\n\n<x-jet-dropdown-link href="{{ route('profile.show') }}">\n    {{ __('Profile') }}\n</x-jet-dropdown-link>\n@endcan\n
Run Code Online (Sandbox Code Playgroud)\n

因此,我可以根据角色隐藏菜单项,但不幸的是,我仍然可以通过知道确切的 URL 直接访问该功能。

\n

我想我必须编写一个中间件来限制对某些功能的访问,但具体怎么做呢?

\n

在此堆栈中处理此问题的正确且可接受的方法是什么?

\n

谢谢!\nArmand\n所以一切看起来都很好,但是(!)

\n

如何禁止直接访问隐藏项目?我想在这种情况下,路由是由 sainttum 控制的,而角色和权限是由 Spatie 的包控制的。

\n

是否可以将两者联系起来?

\n

谢谢!

\n

laravel laravel-permission laravel-sanctum laravel-jetstream laravel-fortify

7
推荐指数
1
解决办法
3024
查看次数

如何为 Laravel Fortify + Inertia + vue 添加角色和权限?

我的项目使用 laravel fortify,惯性与 vue。我必须添加基于角色的权限(就像 spatie 权限包一样)。我对于强化和惯性还是一个初学者。但我有 spatie 包的经验。我对如何添加角色和权限进行强化感到困惑。目前我计划创建像 spatie 包 has 这样的表结构(角色、权限、roles_has_permissions 等)。是否有每个构建包或更好的方法来实现角色和权限?并在 vue 文件中使用“@can”?谢谢。

编辑

大家好,这是我目前所做的(我现在正在使用这个)。它正在工作,但仍需要一些改进,(任何更好的解决方案我真的很感激)

1)照常安装和配置 spatie/laravel-permission

2)使用seeder向表添加预定义的权限和角色

  1. 在用户模型中创建函数来获取权限数组列表

    // user model function
    public function getPermissionArray()
     {
         return $this->getAllPermissions()->mapWithKeys(function($pr){
             return [$pr['name'] => true];
         });
    
     }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 并将该功能添加到惯性中间件中

// user model function
public function getPermissionArray()
 {
     return $this->getAllPermissions()->mapWithKeys(function($pr){
         return [$pr['name'] => true];
     });

 }
Run Code Online (Sandbox Code Playgroud)

现在$page.props.auth.can可以全球访问

  1. 在vue文件中添加权限检查
   <div class="row">
              <div class="col-sm-12 col-md-6" v-if="$page.props.auth.can['user_create']">
                <inertia-link
                  class="btn btn-primary"
                  :href="$route('admin.user.create')"
                  >Create New
                </inertia-link>
              </div>
   </div>
Run Code Online (Sandbox Code Playgroud)

inertiajs laravel laravel-fortify

6
推荐指数
2
解决办法
9465
查看次数

错误包从 Laravel Livewire Blade 模板中消失

以下 PHP 代码用于捕获来自 Livewire 表单的输入。该表单更新用户的密码,对于眼尖的人来说,您可能会发现它的大部分内容取自 Laravel Fortify 框架。

/**
 * Validate and update the user's password.
 *
 * @param  mixed  $user
 * @param  array  $input
 * @return void
 */
public function update($user, array $input)
{
    try {
        Validator::make($input, [
            'current_password' => ['required', 'string'],
            'password' => $this->passwordRules(),
        ])->after(function ($validator) use ($user, $input) {
            if (! isset($input['current_password']) || ! Hash::check($input['current_password'], $user->password)) {
                $validator->errors()->add('current_password', __('The provided password does not match your current password.'));
            }
        })->validateWithBag('updatePassword');
    } catch (\Illuminate\Validation\ValidationException $e) {
        dd ($e);
    } …
Run Code Online (Sandbox Code Playgroud)

laravel laravel-livewire laravel-fortify

6
推荐指数
1
解决办法
785
查看次数

如何在 laravel 中删除 jetstream 并进行强化?

我正在尝试从 Laravel 中删除 Fortify 和 Jetstream 软件包,因此我从 App 中删除了它们。提供者,来自composer.json(需要部分)、操作、配置、供应商。然后我运行 Composer update 并收到以下消息:

脚本 @php artisan package:discover --ansi 处理返回的 post-autoload-dump 事件,错误代码为 1

我还从相同的位置移除了圣所

laravel-8 laravel-jetstream laravel-fortify

5
推荐指数
1
解决办法
1万
查看次数

Laravel Fortify 不响应 HTTP 代码,而是响应实际路由,即使我将注册请求作为 XHR 发送

语境

使用 Postman,我将以下字段发送到 URL,以便在数据库中注册用户http://mywebsite/register

  • 电子邮件

  • 密码

  • 确认密码

  • 姓名

根据文档https://laravel.com/docs/8.x/fortify#registration(我从中找到了上述字段),Fortify已经定义了路线register,所以我不需要自己定义它。

根据文档,并且根据我的需要,我不需要创建注册表:我直接使用 Postman 将这些注册数据/register作为 XHR POST 请求数据发送到 Laravel Fortify 的路由。此外,我不需要 Fortify 返回视图,因此我禁用了它们(https://laravel.com/docs/8.x/fortify#disabling-views)。事实上,我只是等待 HTTP 代码响应,我将在 Postman 的返回数据中看到该响应(见下文)。

Fortify 应该返回什么

由于我已禁用视图并且由于我发送了 XHR POST 请求(在 Postman 中,我将随注册请求一起发送此 HTTP 标头:)X-Requested-With = XMLHttpRequest

如果注册尝试成功,Fortify 会将用户重定向到通过应用程序的 fortify 配置文件中的 home 配置选项配置的 URI。如果登录请求是 XHR 请求,将返回 200 HTTP 响应。

如果请求不成功,用户将被重定向回注册屏幕,并且验证错误将通过共享的 $errors Blade 模板变量提供给您。或者,对于 XHR 请求,验证错误将通过 422 HTTP 响应返回。

https://laravel.com/docs/8.x/fortify#registration

Fortify 实际返回什么

它正确注册了用户。但我在 Postman 中看到的结果是Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException …

xmlhttprequest laravel postman laravel-authentication laravel-fortify

5
推荐指数
1
解决办法
1973
查看次数

Laravel 9 以另一个用户身份登录

我希望能够从我的管理员帐户以其他用户身份登录。

我正在使用 Laravel fortify 使用 Inertia Js 制作 SPA 应用程序来处理会话和登录。

在 laravel 8 中,我能够以另一个用户身份登录,但在 laravel 9 中,登录方法使我注销。

$user = User::find(2);
Auth::guard('web')->login($user); // or // Auth::login($user); 
Run Code Online (Sandbox Code Playgroud)

我检查了 csrf 令牌,尝试排除我的 uri,但没有任何变化。

如果您有任何想法,请不要犹豫,谢谢!

php inertiajs laravel laravel-fortify

3
推荐指数
1
解决办法
1181
查看次数

记录用户 laravel 8 fortify 的上次登录时间戳和 ip

我目前正在记录用户的上次登录时间戳并将 ip 记录到用户表中。我在 laravel 7 的 auth 控制器登录功能中做到了这一点。像这样:

            $user->last_login = Carbon::now()->toDateTimeString();
            $user->last_login_ip = $request->getClientIp();
            $user->save();
Run Code Online (Sandbox Code Playgroud)

但当前项目我使用 laravel fortify 包。我仍在学习这个包。记录用户登录时间戳和 ip 的最佳方法是什么??

谢谢

laravel laravel-8 laravel-fortify

2
推荐指数
1
解决办法
3606
查看次数

Laravel 8 在受保护的应用程序/模型中更改用户表名称不起作用

我有一个相对较新的 laravel 8 安装与 jetstream/fortify。我正在尝试使用预先存在的用户表,该表的表名与默认的“用户”不同。

通过阅读周围的内容,我认为我必须在 app\Model\User.php 中更新它。我所做的如下:

 class User extends Authenticatable               
 14 {                                                                                                       
 15     /**                                                                                                                                                                                                
 16     .* My custom users table                        
 17     .*/
 18     protected $table = "user";  // note here it is user not users
 19     protected $primaryKey = "user_id";
Run Code Online (Sandbox Code Playgroud)

但是当我尝试注册新用户时,我收到 SQLSTATE 错误,指出未找到基表或视图......“mydb.users”不存在。

所以它仍然在寻找“用户”而不是“用户”。

我还需要在哪里更改此设置?

该文档似乎没有提到其他任何地方,其他堆栈答案似乎表明这应该足够了

编辑:这是我的 config/auth.php 部分

 67                                                                                         
 68     'providers' => [                                                                                 
 69     .   'users' => [                                               
 70     .   .   'driver' => 'eloquent',                                           
 71     .   .   'model' => App\Models\User::class,                                                                                  
 72     .   ],                                                                                                                                                                                                               
 73                    
 74 …
Run Code Online (Sandbox Code Playgroud)

php laravel laravel-fortify

2
推荐指数
1
解决办法
2290
查看次数

如何在 Laravel Fortify 中更改重置密码电子邮件模板?

我正在使用 fortify 进行身份验证,但是我需要更改 fortify 自动发送的“重置密码”电子邮件模板中的文本。我找不到实现此目标的方法。

是否可以从 Nova 编辑模板?我在 Nova 中有一个 MailTemplate 资源,允许从 Nova 更改电子邮件模板,但我无法实现“重置密码电子邮件”,因为它是由 fortify 发送的,并且无法找到控制它的方法。

laravel laravel-fortify

2
推荐指数
1
解决办法
4789
查看次数