PHPackages                             uspdev/senhaunica-shield - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Authentication &amp; Authorization](/categories/authentication)
4. /
5. uspdev/senhaunica-shield

ActiveLibrary[Authentication &amp; Authorization](/categories/authentication)

uspdev/senhaunica-shield
========================

Biblioteca para integração da senha única USP com o framework Codeigniter Shield

v2.0.5(3mo ago)073GPL-2.0-or-laterPHPPHP &gt;=8.1

Since Feb 3Pushed 3mo ago10 watchersCompare

[ Source](https://github.com/uspdev/senhaunica-shield)[ Packagist](https://packagist.org/packages/uspdev/senhaunica-shield)[ Docs](https://github.com/uspdev/senhaunica-shield)[ RSS](/packages/uspdev-senhaunica-shield/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (10)Dependencies (3)Versions (15)Used By (0)

Senhaunica-shield
=================

[](#senhaunica-shield)

Biblioteca para integração da senha única USP com o framework Codeigniter Shield

Dependência
-----------

[](#dependência)

- biblioteca league/oauth1-client
- PHP &gt;=8.1
- codeigniter4/shield

Instalação e configuração
-------------------------

[](#instalação-e-configuração)

```
composer require uspdev/senhaunica-shield

```

O framework exige a utilização de banco de dados. Após a instalação dos pacotes, é necessário configurar a conexão com a base de dados no arquivo .env.

```
database.default.hostname = localhost
database.default.database = senhaunica-shield
database.default.username = root
database.default.password = sua_senha_secreta
database.default.DBDriver = MySQLi
database.default.DBPrefix =
database.default.port = 3306

```

Criar os arquivos de configuração e as tabelas do banco de dados do framework Shield com o comando

```
php spark shield:setup

```

A documentação para instalação e configuração completa do framework pode ser acessada no link

Importante: verificar se a proteção csrf está configurada para session no arquivo `app/Config/Security.php`

```
public string $csrfProtection = 'session';

```

Em seguida, executar o comando para adicionar o campo fullname na tabela users e rota para login USP.

```
php spark auth:senhaunica-setup

```

Após a configuração do Shield, é necessário cadastrar o token da aplicação em  e inserir as configurações no .env

```
SENHAUNICA_KEY = iau
SENHAUNICA_SECRET = sua_senha_secreta
SENHAUNICA_CALLBACK_ID = 1

```

Também no .env, configurar a linguagem do sistema, apontar para os models e views customizados da biblioteca e inserir superadmins, se necessário (nº USP separados por vírgula)

```
# Linguagem
app.defaultLocale = pt-BR

## Shield configurações
auth.views.register = \Uspdev\SenhaunicaShield\Views\register
auth.views.login = \Uspdev\SenhaunicaShield\Views\login
auth.userProvider = \Uspdev\SenhaunicaShield\Models\UserModel
auth.allowRegistration = true
auth.superadmin=111111,222222

```

Caso deseje customizar as Views, alterar esses campos. Lembre-se de utilizar o formulário da biblioteca como modelo para não esquecer dos campos da tabela.

O Shield permite habilitar ou não novos registros, login por URL, etc. Verificar na documentação.

No caso do auth.allowRegistration, se definido como false, o sistema não permitirá a criação automática de usuário, mesmo com senha única USP, a não ser dos usuários definidos como superadmin em auth.superadmin. Essa diretiva é útil para sistemas em que apenas um número restrito de usuários deve acessá-los. Pode-se criar um painel administrativo para inserção manual dos usuários, definindo-se o número USP como username. Dessa forma, ao tentar logar, o sistema reconhecerá o usuário como cadastrado e automaticamente atualizará seus dados pessoais como fullname e vinculos.

Atualização para versão 2.0.0
=============================

[](#atualização-para-versão-200)

A versão 2.0.0 da biblioteca traz mudanças importantes na estrutura da tabela users e na forma de manipulação dos vínculos dos usuários. Essas alterações podem causar problemas de compatibilidade em sistemas que utilizam a versão 1.2.0, especialmente em consultas, exibições e verificações que dependiam dos seguintes campos, agora removidos:

- tipoVinculo
- codigoSetor
- nomeAbreviadoSetor
- nomeSetor
- codigoUnidade
- siglaUnidade
- nomeUnidade
- nomeVinculo
- nomeAbreviadoFuncao
- tipoFuncao

Novos campos
------------

[](#novos-campos)

- **vinculos:** armazena todos os dados de vínculos do usuário em formato JSON (array)
- **tipoUser**: indica a origem do usuário.

    - USP → usuário autenticado via Senha Única USP.
    - EXTERNO → usuário criado localmente no sistema, sem autenticação pela USP.
- **observacao**: campo livre para observações adicionais sobre o usuário.

Novos métodos auxiliares
------------------------

[](#novos-métodos-auxiliares)

Para facilitar consultas e verificações sobre vínculos e unidades, foram criados métodos na User Entity. Esses métodos encapsulam a lógica de leitura do campo vinculos e permitem verificações diretas via auth()-&gt;user()-&gt;metodo().

Métodos disponíveis na User Entity
----------------------------------

[](#métodos-disponíveis-na-user-entity)

MétodoParâmetrosRetornoDescriçãogetVinculos()–arrayRetorna todos os vínculos completos em formato de array associativo.getTiposVinculo()–arrayRetorna apenas os tipos de vínculo (ex.: \['SERVIDOR','ALUNO'\]).getCodigosSetores()–arrayRetorna todos os códigos de setor associados aos vínculos.getNomesAbreviadosSetores()–arrayRetorna os nomes abreviados dos setores.getNomeSetores()–arrayRetorna os nomes completos dos setores.getUnidadesCodigos()–arrayRetorna os códigos das unidades.getUnidadesSiglas()–arrayRetorna as siglas das unidades.getUnidadesNomes()–arrayRetorna os nomes completos das unidades.getVinculosNomes()–arrayRetorna os nomes dos vínculos (ex.: “Aluno”, “Servidor”).getNomesAbreviadosFuncao()–arrayRetorna os nomes abreviados da função do usuáriogetTipoFuncao()–arrayRetorna os tipos de função do usuáriohasVinculo($vinculo)string $vinculoboolVerifica se o usuário possui determinado vínculo (case-insensitive).hasUnidadeSigla($unidade)string $unidadeboolVerifica se o usuário pertence a uma unidade pela sigla (case-insensitive).hasUnidadeCodigo($unidade)int $unidadeboolVerifica se o usuário pertence a uma unidade pelo código.hasFuncao($funcao)string $funcaoboolVerifica se o usuário possui determinada função (case-insensitive). OBS: Alguns docentes possuem tipoVinculo 'SERVIIDOR' e tipoFuncao 'docente'.Observações importantes
-----------------------

[](#observações-importantes)

1. Sistemas que dependiam dos campos removidos devem ser adaptados para usar os novos métodos.
2. Após atualizar para a versão 2.0.0, é necessário rodar as migrations do pacote:

```
php spark migrate --all

```

Atualização para 2.0.0
----------------------

[](#atualização-para-200)

Para atualizar o pacote:

```
composer update uspdev/senhaunica-shield
php spark migrate --all
```

Workflow
--------

[](#workflow)

Ao realizar a autenticação no servidor oAuth USP, a biblioteca verifica se já existe na tabela de usuários do Codeigniter Shield o número USP do usuário. Em caso afirmativo, faz o logon. Caso contrário, cria o usuário na tabela, atribui ao grupo default e, por fim, faz o logon.

A proteção de rotas e o acesso aos dados do usuário podem ser consultados na documentação oficial do framework em

Exemplo de uso
--------------

[](#exemplo-de-uso)

Após configuração, as seguintes rotas estarão disponíveis:

URIDescriçãoOBS/loginFormulário de Login com botão para login USP-/loginuspRedireciona para o sistema de login USPLembrar de configurar o token de autenticação/registerExibe formulário para cadastro de usuárioPode ser desabilitado no .env com auth.allowRegistration = false/logoutFaz o logout do usuário-Guia rápido de métodos do CodeIgniter Shield
============================================

[](#guia-rápido-de-métodos-do-codeigniter-shield)

MétodoDescriçãoComo Usar`auth()->attempt($credentials)`Tenta autenticar um usuário com credenciais fornecidas.`php auth()->attempt(['email' => 'user@example.com', 'password' => 'senha123']); ``auth()->login($user)`Faz login de um usuário específico.`php $user = model(UserModel::class)->find(1); auth()->login($user); ``auth()->logout()`Encerra a sessão do usuário autenticado.`php auth()->logout(); ``auth()->user()`Obtém o usuário autenticado. Retorna `null` se não houver um usuário logado.`php $user = auth()->user(); echo $user->email; ``auth()->loggedIn()`Verifica se há um usuário autenticado.`php if (auth()->loggedIn()) { echo "Usuário autenticado"; } ``auth()->id()`Retorna o ID do usuário autenticado.`php $userId = auth()->id(); ``auth()->register($credentials, $activate = false)`Registra um novo usuário. O segundo parâmetro define se a conta será ativada automaticamente.`php auth()->register(['email' => 'newuser@example.com', 'password' => 'senha123'], true); ``auth()->forgotPassword($email)`Inicia o processo de redefinição de senha.`php auth()->forgotPassword('user@example.com'); ``auth()->resetPassword($token, $newPassword)`Redefine a senha de um usuário com um token de recuperação.`php auth()->resetPassword($token, 'novaSenha123'); ``auth()->activate($user)`Ativa manualmente um usuário.`php $user = model(UserModel::class)->find(1); auth()->activate($user); ``auth()->throttle()->check($ipAddress, $identifier)`Verifica se um usuário excedeu as tentativas de login permitidas.`php if (auth()->throttle()->check($ip, $email)) { echo "Muitas tentativas de login!"; } `- Para mais detalhes, consultar a [documentação oficial](https://github.com/codeigniter4/shield).

Controle de Rotas com CodeIgniter Shield
========================================

[](#controle-de-rotas-com-codeigniter-shield)

O **CodeIgniter Shield** fornece filtros para controlar o acesso às rotas com base na sessão do usuário, permissões e grupos.
Este guia explica resume como configurar e aplicar esses filtros.

---

1. Configuração do Arquivo `Filters.php`
----------------------------------------

[](#1-configuração-do-arquivo-filtersphp)

Para utilizar os filtros de autenticação do Shield, é necessário adicioná-los ao arquivo de configuração de filtros localizado em:

`app/Config/Filters.php`

### Exemplo de Configuração:

[](#exemplo-de-configuração)

Abra `app/Config/Filters.php` e adicione os filtros do **Shield**:

```
namespace Config;

use CodeIgniter\Config\BaseConfig;

class Filters extends BaseConfig
{
    public array $aliases = [
        ...
        'session'    => \CodeIgniter\Shield\Filters\SessionAuth::class, // Verifica se o usuário está autenticado
        'group'      => \CodeIgniter\Shield\Filters\GroupFilter::class, // Restringe acesso por grupo
        'permission' => \CodeIgniter\Shield\Filters\PermissionFilter::class, // Restringe acesso por permissão
    ];

    ...
}
```

2. Protegendo Rotas no Arquivo Routes.php
-----------------------------------------

[](#2-protegendo-rotas-no-arquivo-routesphp)

No arquivo `app/Config/Routes.php`, podemos aplicar os filtros nas rotas.

### Protegendo Rotas com session

[](#protegendo-rotas-com-session)

```
$routes->group('dashboard', ['filter' => 'session'], function ($routes) {
    $routes->get('/', 'DashboardController::index');
});
```

Usuários não autenticados serão redirecionados para a tela de login.

### Protegendo Rotas com session

[](#protegendo-rotas-com-session-1)

```
$routes->group('admin', ['filter' => 'group:admin'], function ($routes) {
    $routes->get('/', 'AdminController::index');
    $routes->get('users', 'AdminController::users');
});
```

Apenas usuários que pertencem ao grupo admin terão acesso

### Protegendo Rotas com session

[](#protegendo-rotas-com-session-2)

```
$routes->group('reports', ['filter' => 'permission:view-reports'], function ($routes) {
    $routes->get('/', 'ReportsController::index');
});
```

Apenas usuários com a permissão view-reports poderão acessar

###  Health Score

41

—

FairBetter than 89% of packages

Maintenance79

Regular maintenance activity

Popularity9

Limited adoption so far

Community14

Small or concentrated contributor base

Maturity54

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 62.4% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~27 days

Recently: every ~15 days

Total

14

Last Release

108d ago

Major Versions

v0.2.1 → v1.0.02025-05-30

v1.2.0 → v2.0.02025-11-25

### Community

Maintainers

![](https://www.gravatar.com/avatar/8a59480189a3ba1aa8355cb434880695569433f5d1c9e375e8238d5ff1a56beb?d=identicon)[uspdev](/maintainers/uspdev)

---

Top Contributors

[![dpicon83](https://avatars.githubusercontent.com/u/42186450?v=4)](https://github.com/dpicon83 "dpicon83 (58 commits)")[![masakik](https://avatars.githubusercontent.com/u/986915?v=4)](https://github.com/masakik "masakik (32 commits)")[![thiagogomesverissimo](https://avatars.githubusercontent.com/u/908508?v=4)](https://github.com/thiagogomesverissimo "thiagogomesverissimo (2 commits)")[![fgmusp](https://avatars.githubusercontent.com/u/55391794?v=4)](https://github.com/fgmusp "fgmusp (1 commits)")

### Embed Badge

![Health badge](/badges/uspdev-senhaunica-shield/health.svg)

```
[![Health](https://phpackages.com/badges/uspdev-senhaunica-shield/health.svg)](https://phpackages.com/packages/uspdev-senhaunica-shield)
```

###  Alternatives

[fof/oauth

Allow users to log in with GitHub, Facebook, Google, Discord, GitLab, LinkedIn, and more!

50118.7k41](/packages/fof-oauth)[agungsugiarto/boilerplate

CodeIgniter4 Boilerplate based on AdminLTE 3 with user management, roles, permissions, ...

1647.7k](/packages/agungsugiarto-boilerplate)[activecollab/qbo-wrapper

Quickbooks online API wrapper

1556.7k](/packages/activecollab-qbo-wrapper)[agungsugiarto/codeigniter4-authentication

Provides an API for authentication and includes concrete authentication adapters for common use case scenarios

494.5k2](/packages/agungsugiarto-codeigniter4-authentication)[casbin/codeigniter-permission

Associate users with roles and permissions, use Casbin in CodeIgniter4 Web Framework.

443.0k](/packages/casbin-codeigniter-permission)[dukt/social

Let your visitors log into Craft with web services like Facebook, Google, Twitter…

1141.0k5](/packages/dukt-social)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
