Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa noite pessoal,
Estou desenvolvendo uma aplicação e estou utilizando o método Auth do Laravel 5.8. Aparentemente esta tudo funcionando, acesso a certas áreas solicitam login. Eu gostaria de saber como faço para limitar o acesso de registro de usuários de um modo mais simples, pois andei pesquisando e existe formas de criar uma conta admin, mas para o meu propósito não teria necessidade de tanta complexidade, apenas gostaria de limitar o acesso ao http://localhost:8000/register para uma conta de e-mail especifica, ou mesmo se precisar criar um campo na tabela para validar se existe, não sei direito como fazer isso, estou aprendendo faz pouco tempo a respeito do Laravel.
Exemplo de como esta funcionando minha app:
http://localhost:8000/sistema === REQUER LOGIN PARA ACESSO
http://localhost:8000/register == TAMBEM REQUER LOGIN, PORÉM QUALQUER USUÁRIO LOGADO FAZ REGISTRO DE NOVO USUÁRIO PARA ESSA ROTA EU GOSTARIA DE LIMITAR APENAS AO MEU EMAIL OU NOME DE USUÁRIO CADASTRADO.
Obrigado!
Bom dia companheiro, obrigado pelo retorno.
Eu tentei da forma que você me passou:
if (Auth::id() == 1){
//$this->middleware('auth');
return view('register');
}else{
abort(403);
}
Porém sem sucesso, ele esta negando o acesso até para o meu usuário com ID == 1 que seria de fato a conta que eu quero que logue:
também tentei apenas o retorno do $this->middleware('auth') e foi o mesmo caso, ele nega acesso até para o meu usuário.
Estou fazendo essa config no RegisterController@kelvinferraz Mostra o seu controle ou sua função de rota.
<?php
namespace App\Http\Controllers\Auth;
use App\User;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;
use Illuminate\Support\Facades\Auth;
class RegisterController extends Controller
{
/*
|--------------------------------------------------------------------------
| Register Controller
|--------------------------------------------------------------------------
|
| This controller handles the registration of new users as well as their
| validation and creation. By default this controller uses a trait to
| provide this functionality without requiring any additional code.
|
*/
use RegistersUsers;
/**
* Where to redirect users after registration.
*
* @var string
*/
protected $redirectTo = '/sistema';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
if (Auth::id() == 1){
//$this->middleware('auth');
$this->middleware('auth');
//return view('register');
}else{
abort(403);
}
}
/**
* Get a validator for an incoming registration request.
*
* @param array $data
* @return \Illuminate\Contracts\Validation\Validator
*/
protected function validator(array $data)
{
return Validator::make($data, [
'name' => ['required', 'string', 'max:255'],
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
'password' => ['required', 'string', 'min:8', 'confirmed'],
]);
}
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return \App\User
*/
protected function create(array $data)
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
]);
}
}@kelvinferraz Bom você não pode acessar o usuário autenticado no construtor do seu controlador porque o middleware ainda não foi executado.
Como alternativa, você pode definir um middleware baseado em Closure diretamente no construtor do seu controlador.
public function __construct()
{
$this->middleware('auth');
$this->middleware(function ($request, $next) {
$user = Auth::user();
if ($user->id != 1 /* <-- Seu id aqui */ )
{
return abort(403);
}
return $next($request);
});
}Entendi e aparentemente deu certo!
Cara obrigado pela explicação, ficou bem simples e funcional como deve ser!
Obrigado!
@kelvinferraz
Você pode usar o Auth para pegar o ID do usuário atualmente autenticado e usar um if para entrar nessa rota.
Exemplo:
use Illuminate\Support\Facades\Auth;
if (Auth::id() === 1 // ID da sua conta)
{
else
{